绊脚石乃是进身之阶。

字段折叠错误

回复

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

java 客户端 获取 termvectors

ElasticsearchJiaShiwen 发表了文章 • 0 个评论 • 4259 次浏览 • 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 个回复 • 3119 次浏览 • 2018-01-22 10:15 • 来自相关话题

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

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

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

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

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

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

比较复杂的多索引搜索,不知道怎么处理

Elasticsearchmcs41531 回复了问题 • 2 人关注 • 1 个回复 • 1824 次浏览 • 2018-01-19 17:29 • 来自相关话题

logstash配置log4j启动报错

LogstashMr. Zhang 回复了问题 • 3 人关注 • 3 个回复 • 7230 次浏览 • 2018-06-13 09:34 • 来自相关话题

ES中能不能根据结果集各字段的不同值自动进行聚合,求助!!!

Elasticsearchvenyowang 回复了问题 • 2 人关注 • 1 个回复 • 2250 次浏览 • 2018-01-19 16:17 • 来自相关话题

社区日报 第163期 (2018-01-19)

社区日报laoyang360 发表了文章 • 0 个评论 • 1423 次浏览 • 2018-01-19 06:44 • 来自相关话题

1、ElasticSearch集群迁移和升级总结 
http://t.cn/RQoQv2k
2、年后跳一跳|ES面试基础知识要点
http://t.cn/RQoHTLU
3、ES实践总结
http://t.cn/RHHczic

编辑:铭毅天下
归档:https://elasticsearch.cn/article/460
订阅:https://tinyletter.com/elastic-daily

问下各位logstash如何全量同步mysql数据,每天晚上12点更新,每次更新前将之前的数据删掉

Logstashsmiling 回复了问题 • 4 人关注 • 4 个回复 • 6472 次浏览 • 2018-01-22 17:12 • 来自相关话题

es服务器报错 求解

回复

Elasticsearchych 发起了问题 • 1 人关注 • 0 个回复 • 1388 次浏览 • 2018-01-18 17:38 • 来自相关话题

elasticsearch查询语句优化问题

Elasticsearchlaoyang360 回复了问题 • 4 人关注 • 1 个回复 • 2684 次浏览 • 2018-01-20 13:05 • 来自相关话题

求助连接elasticsearch

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

ES rest 查询 timeout的问题

回复

Elasticsearchggsimida 发起了问题 • 1 人关注 • 0 个回复 • 6028 次浏览 • 2018-01-18 10:51 • 来自相关话题