你不会是程序猿吧?

ES中是否无法实现 mysql 类似的 join

Elasticsearchfanmo3yuan 回复了问题 • 5 人关注 • 4 个回复 • 7229 次浏览 • 2019-01-11 10:50 • 来自相关话题

社区日报 第166期 (2018-01-22)

社区日报cyberdak 发表了文章 • 0 个评论 • 1904 次浏览 • 2018-01-22 08:45 • 来自相关话题

1.如何选择使用logstash还是elasticsearch-ingest节点?
http://t.cn/RQjPCYj

2.为machine learning jobs自定义聚合查询。
http://t.cn/RQjPQdf

3.elasticsearch因为cpu漏洞所受到的性能冲击。
http://t.cn/RQjh2oD 

编辑:cyberdak
归档:https://elasticsearch.cn/article/464
订阅:https://tinyletter.com/elastic-daily
 

ES增加节点

回复

Elasticsearchchenxm0927 发起了问题 • 1 人关注 • 0 个回复 • 3877 次浏览 • 2018-01-21 15:30 • 来自相关话题

社区日报 第165期 (2018-01-21)

社区日报至尊宝 发表了文章 • 0 个评论 • 1825 次浏览 • 2018-01-21 09:07 • 来自相关话题

  1. Elasticsearch的最佳分片管理策略。
    [http://t.cn/RQp1VMF](http://t.cn/RQp1VMF)

  2. Elasticsearch映射:关于如何创建,编辑,删除的例子。
    [http://t.cn/RQObLTG](http://t.cn/RQObLTG)

  3. (自备梯子)想象一个更好的互联网环境。
    [http://t.cn/RQO589h](http://t.cn/RQO589h)


聚合去重统计数量,使用transportClient api 执行失败

回复

Elasticsearchdlliwei 发起了问题 • 0 人关注 • 0 个回复 • 4977 次浏览 • 2018-01-20 16:24 • 来自相关话题

ik中文分词结果得分问题

Elasticsearchrockybean 回复了问题 • 3 人关注 • 1 个回复 • 2795 次浏览 • 2018-01-22 06:48 • 来自相关话题

社区日报 第164期 (2018-01-20)

社区日报千夜 发表了文章 • 0 个评论 • 1748 次浏览 • 2018-01-20 11:28 • 来自相关话题

几篇旧闻
1. Elasticsearch 联结查询 joining queries
http://t.cn/RQNunNP 
2. Elasticsearch 中的 ignore_above
http://t.cn/RQNu1fW 
3. Migration Patterns: Elasticsearch
http://t.cn/RQp8yGC
 
编辑:江水
归档:https://elasticsearch.cn/article/462
订阅:https://tinyletter.com/elastic-daily
 

elasticsearch6.1.2 java rest high level client 创建连接时报找不到CheckedConsumer类

回复

Elasticsearchyzy 发起了问题 • 1 人关注 • 0 个回复 • 4741 次浏览 • 2018-01-19 22:21 • 来自相关话题

es 其中一台莫名踢出集群 请各帮忙分析一下原因

Elasticsearchxinfanwang 回复了问题 • 3 人关注 • 1 个回复 • 3860 次浏览 • 2018-01-23 11:07 • 来自相关话题

字段折叠错误

回复

Elasticsearchdlliwei 发起了问题 • 1 人关注 • 0 个回复 • 2261 次浏览 • 2018-01-19 16:35 • 来自相关话题

java 客户端 获取 termvectors

ElasticsearchJiaShiwen 发表了文章 • 0 个评论 • 5281 次浏览 • 2018-01-19 15:56 • 来自相关话题

elasticsearch的termvectors包括了term的位置、词频等信息。这些信息用于相应的数据统计或开发其他功能,本文介绍termvecters如何使用,如何通过java客户端获取termvectors相关信息。



要使用termvctor首先要配置mapping中field的"term_vector"属性,默认状态es不开启termvector,因为这样会增加索引的体积,毕竟多存了不少元数据。

<br /> PUT test<br /> {<br /> "mappings": {<br /> "qa_test": {<br /> "dynamic": "strict",<br /> "_all": {<br /> "enabled": false<br /> },<br /> "properties": {<br /> "question": {<br /> "properties": {<br /> "cate": {<br /> "type": "keyword"<br /> },<br /> "desc": {<br /> "type": "text",<br /> "store": true,<br /> "term_vector": "with_positions_offsets_payloads",<br /> "analyzer": "ik_smart"<br /> },<br /> "time": {<br /> "type": "date",<br /> "store": true,<br /> "format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss"<br /> },<br /> "title": {<br /> "type": "text",<br /> "store": true,<br /> "term_vector": "with_positions_offsets_payloads",<br /> "analyzer": "ik_smart"<br /> }<br /> }<br /> },<br /> "updatetime": {<br /> "type": "date",<br /> "store": true,<br /> "format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss"<br /> }<br /> }<br /> }<br /> },<br /> "settings": {<br /> "index": {<br /> "number_of_shards": "1",<br /> "requests": {<br /> "cache": {<br /> "enable": "true"<br /> }<br /> },<br /> "number_of_replicas": "1"<br /> }<br /> }<br /> }<br />
注意示例中的"title"的"term_vector"属性。

接下来为索引创建一条数据

<br /> PUT qa_test_02/qa_test/1<br /> {<br /> "question": {<br /> "cate": [<br /> "装修流程",<br /> "其它"<br /> ],<br /> "desc": "筒灯,大洋和索正这两个牌子,哪个好?希望内行的朋友告知一下,谢谢!",<br /> "time": "2016-07-02 19:59:00",<br /> "title": "筒灯大洋和索正这两个牌子哪个好"<br /> },<br /> "updatetime": 1467503940000<br /> }<br />

下面我们看看这条数据上question.title字段的termvector信息

<br /> GET qa_test_02/qa_test/1/_termvectors<br /> {<br /> "fields": [<br /> "question.title"<br /> ],<br /> "offsets": true,<br /> "payloads": true,<br /> "positions": true,<br /> "term_statistics": true,<br /> "field_statistics": true<br /> }<br />

结果大概这个样子

<br /> {<br /> "_index": "qa_test_02",<br /> "_type": "qa_test",<br /> "_id": "1",<br /> "_version": 1,<br /> "found": true,<br /> "took": 0,<br /> "term_vectors": {<br /> "question.title": {<br /> "field_statistics": {<br /> "sum_doc_freq": 9,<br /> "doc_count": 1,<br /> "sum_ttf": 9<br /> },<br /> "terms": {<br /> "和": {<br /> "doc_freq": 1,<br /> "ttf": 1,<br /> "term_freq": 1,<br /> "tokens": [<br /> {<br /> "position": 2,<br /> "start_offset": 4,<br /> "end_offset": 5<br /> }<br /> ]<br /> },<br /> "哪个": {<br /> "doc_freq": 1,<br /> "ttf": 1,<br /> "term_freq": 1,<br /> "tokens": [<br /> {<br /> "position": 7,<br /> "start_offset": 12,<br /> "end_offset": 14<br /> }<br /> ]<br /> },<br /> "大洋": {<br /> "doc_freq": 1,<br /> "ttf": 1,<br /> "term_freq": 1,<br /> "tokens": [<br /> {<br /> "position": 1,<br /> "start_offset": 2,<br /> "end_offset": 4<br /> }<br /> ]<br /> },<br /> "好": {<br /> "doc_freq": 1,<br /> "ttf": 1,<br /> "term_freq": 1,<br /> "tokens": [<br /> {<br /> "position": 8,<br /> "start_offset": 14,<br /> "end_offset": 15<br /> }<br /> ]<br /> },<br /> "正": {<br /> "doc_freq": 1,<br /> "ttf": 1,<br /> "term_freq": 1,<br /> "tokens": [<br /> {<br /> "position": 4,<br /> "start_offset": 6,<br /> "end_offset": 7<br /> }<br /> ]<br /> },<br /> "牌子": {<br /> "doc_freq": 1,<br /> "ttf": 1,<br /> "term_freq": 1,<br /> "tokens": [<br /> {<br /> "position": 6,<br /> "start_offset": 10,<br /> "end_offset": 12<br /> }<br /> ]<br /> },<br /> "筒灯": {<br /> "doc_freq": 1,<br /> "ttf": 1,<br /> "term_freq": 1,<br /> "tokens": [<br /> {<br /> "position": 0,<br /> "start_offset": 0,<br /> "end_offset": 2<br /> }<br /> ]<br /> },<br /> "索": {<br /> "doc_freq": 1,<br /> "ttf": 1,<br /> "term_freq": 1,<br /> "tokens": [<br /> {<br /> "position": 3,<br /> "start_offset": 5,<br /> "end_offset": 6<br /> }<br /> ]<br /> },<br /> "这两个": {<br /> "doc_freq": 1,<br /> "ttf": 1,<br /> "term_freq": 1,<br /> "tokens": [<br /> {<br /> "position": 5,<br /> "start_offset": 7,<br /> "end_offset": 10<br /> }<br /> ]<br /> }<br /> }<br /> }<br /> }<br /> }<br />
下面我们说说如何通过java代码实现termvector的获取,不说废话直接上代码

<br /> TermVectorsResponse termVectorResponse = client.prepareTermVectors().setIndex(sourceindexname).setType(sourceindextype)<br /> .setId(id).setSelectedFields(fieldname).setTermStatistics(true).execute()<br /> .actionGet();<br /> XContentBuilder builder = XContentFactory.contentBuilder(XContentType.JSON);<br /> termVectorResponse.toXContent(builder, null);<br /> System.out.println(builder.string());<br /> Fields fields = termVectorResponse.getFields();<br /> Iterator<String> iterator = fields.iterator();<br /> while (iterator.hasNext()) {<br /> String field = iterator.next();<br /> Terms terms = fields.terms(field);<br /> TermsEnum termsEnum = terms.iterator();<br /> while (termsEnum.next() != null) {<br /> BytesRef term = termsEnum.term();<br /> if (term != null) {<br /> System.out.println(term.utf8ToString() + termsEnum.totalTermFreq());<br /> }<br /> }<br /> }<br /> <br />
获取TermVectorsResponse的代码很好理解,主要是设置索引名称、索引type、索引id以及需要展示的若干属性。

接下来是如何获取某一term的termvector,有两种方案第一种是通过TermVectorsResponse的toXContent方法直接生成XContentBuilder,这种方法可以直接获取和上面通过DSL查询一样的json结果;第二种是通过Fields的iterator遍历fields,获取TermsEnum,熟悉lucene的同学应会更熟悉第二种方法。






使用ES Http远程调用查询数据速度很慢?本地部署查询正常?为什么?谢谢

Elasticsearchyangchenq 回复了问题 • 2 人关注 • 2 个回复 • 3604 次浏览 • 2018-01-22 10:15 • 来自相关话题

blocks.read_only_allow_delete的配置为什么自动变

Elasticsearchrochy 回复了问题 • 2 人关注 • 2 个回复 • 7653 次浏览 • 2018-10-24 17:22 • 来自相关话题

创建index会影响es的写入性能吗?

Elasticsearchluohuanfeng 回复了问题 • 3 人关注 • 1 个回复 • 3021 次浏览 • 2018-01-19 16:19 • 来自相关话题

全文检索 时 中文 有效,但是英文和数字不生效 这个怎么处理?

Elasticsearchlaoyang360 回复了问题 • 5 人关注 • 2 个回复 • 4549 次浏览 • 2018-01-19 19:18 • 来自相关话题