100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 白话Elasticsearch04- 结构化搜索之使用terms query搜索多个值以及多值搜索结果优化

白话Elasticsearch04- 结构化搜索之使用terms query搜索多个值以及多值搜索结果优化

时间:2023-11-17 01:27:13

相关推荐

白话Elasticsearch04- 结构化搜索之使用terms query搜索多个值以及多值搜索结果优化

文章目录

terms概述准备数据小例子搜索articleID为KDKE-B-9947-#kL5或QQPX-R-3956-#aD8的帖子搜索tag中包含java的帖子优化搜索结果,仅仅搜索tag只包含java的帖子

terms概述

继续跟中华石杉老师学习ES,第三篇

课程地址: /view/55

https://www.elastic.co/guide/en/elasticsearch/reference/6.4/query-dsl-terms-filter.html

6.4版本对应的 terms query

https://www.elastic.co/guide/en/elasticsearch/reference/6.4/query-dsl-terms-query.html

7.0 版本对应的 terms query

https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-terms-query.html

前面的实例中,我们都是使用的term,只能将一个字段,从一个value中取搜索

term: {"field": "value"}

比如

{"term": {"articcleID": "XHDK-A-1293-#fJ3"}}

terms 呢? terms可以实现将一个字段,从多个value中检索的效果

terms: {"field": ["value1", "value2"]}

类似于SQL中的in

select * from table where col in ("value1","value2"......)

准备数据

为了演示terms, 我们再新增个tag字段吧

POST /forum/article/_bulk{"update":{"_id":"1"}}{"doc":{"tag":["java","hadoop"]}}{"update":{"_id":"2"}}{"doc":{"tag":["java"]}}{"update":{"_id":"3"}}{"doc":{"tag":["hadoop"]}}{"update":{"_id":"4"}}{"doc":{"tag":["java","elasticsearch"]}}

小例子

搜索articleID为KDKE-B-9947-#kL5或QQPX-R-3956-#aD8的帖子

GET /forum/_search{"query": {"constant_score": {"filter": {"terms": {"articleID": ["KDKE-B-9947-#kL5","QQPX-R-3956-#aD8"]}}}}}

Terms Query写法(推荐)

GET /forum/_search{"query": {"terms": {"articleID": ["KDKE-B-9947-#kL5","QQPX-R-3956-#aD8"]}}}

搜索tag中包含java的帖子

GET /forum/_search{"query": {"constant_score": {"filter": {"terms": {"tag": ["java"]}}}}

Terms Query写法(推荐)

GET /forum/_search{"query": {"terms": {"tag": ["java"]}}}

优化搜索结果,仅仅搜索tag只包含java的帖子

上面的第二个例子中,搜索java ,可以看到返回了3条结果,其中

"tag": ["java","elasticsearch"]"tag": ["java","hadoop"],

也被搜索出来了,如果仅仅是想搜索tag只包含java的帖子呢 ?

为了达到该效果,我们新增个tag_cnt字段 ,用数量来过滤下

POST /forum/article/_bulk{"update":{"_id":"1"}}{"doc":{"tag_cnt":2}}{"update":{"_id":"2"}}{"doc":{"tag_cnt":1}}{"update":{"_id":"3"}}{"doc":{"tag_cnt":1}}{"update":{"_id":"4"}}{"doc":{"tag_cnt":2}}

GET /forum/_search{"query": {"constant_score": {"filter": {"bool": {"must": [{"term": {"tag_cnt": 1}},{"terms":{"tag":["java"]}}]}}}}}

Terms Query写法(推荐) ,_score 固定为1

GET /forum/_search{"query": {"bool": {"filter": [{"term": {"tag_cnt": 1}},{"terms": {"tag": ["java"]}}]}}}

计算相关度分数 _score 的写法

GET /forum/_search{"query": {"bool": {"must": [{"term": {"tag_cnt": 1}},{"terms": {"tag": ["java"]}}]}}}

总结一下:

terms多值搜索优化terms多值搜索的结果,可以增加个cnt字段标示一下,组合过滤terms相当于SQL中的in语句

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。