Easysearch、Elasticsearch 还是 Opensearch,是个问题

字段折叠错误

回复

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

java 客户端 获取 termvectors

JiaShiwen 发表了文章 • 0 个评论 • 5038 次浏览 • 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远程调用查询数据速度很慢?本地部署查询正常?为什么?谢谢

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

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

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

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

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

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

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

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

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

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

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

es服务器报错 求解

回复

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

elasticsearch查询语句优化问题

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

求助连接elasticsearch

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

ES rest 查询 timeout的问题

回复

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

es存储logstash日志产生多余文件

回复

y-z-f 回复了问题 • 0 人关注 • 1 个回复 • 1819 次浏览 • 2018-01-18 14:11 • 来自相关话题

es 字段中包含/-等特殊字符检索

zou100222 回复了问题 • 3 人关注 • 1 个回复 • 4794 次浏览 • 2019-05-23 13:22 • 来自相关话题

group 多嵌套用es java api怎么快速实现,麻烦能给个例子吗

回复

张鹏 发起了问题 • 1 人关注 • 0 个回复 • 2261 次浏览 • 2018-01-17 20:01 • 来自相关话题