5.terms搜索多个值以及多值搜索结果优化

Posted Outback

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.terms搜索多个值以及多值搜索结果优化相关的知识,希望对你有一定的参考价值。

主要知识点

terms搜索多个值,并和term的比较

   

一、termterms

terms是在这个字段中搜索多个值,相当于sql中的in语法

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

  • term: {"field": "value"}
  • terms: {"field": ["value1", "value2"]}

   

terms搜索

1、为帖子数据增加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"]} }

   

2、搜索articleIDKDKE-B-9947-#kL5QQPX-R-3956-#aD8的帖子

GET /forum/article/_search

{

"query": {

"constant_score": {

"filter": {

"terms": {

"articleID": [

"KDKE-B-9947-#kL5",

"QQPX-R-3956-#aD8"

]

}

}

}

}

}

3、搜索tag中包含java的帖子

GET /forum/article/_search

{

"query" : {

"constant_score" : {

"filter" : {

"terms" : {

"tag" : ["java"]

}

}

}

}

}

   

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

1、先向index插入一条数据,显示tags中字段的个数

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} }

   

2、执行搜索语句

GET /forum/article/_search

{

"query": {

"constant_score": {

"filter": {

"bool": {

"must": [

{

"term": {

"tag_cnt": 1

}

},

{

"terms": {

"tag": ["java"]

}

}

]

}

}

}

}

}

   

["java", "hadoop", "elasticsearch"]

   

三、总结

1terms多值搜索用列表的形式表示

2)优化terms多值搜索的结果,获取我们指定的特定结果集

3terms相当于SQL中的in语句

以上是关于5.terms搜索多个值以及多值搜索结果优化的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch教程 Elasticsearch查询语法 Elasticsearch权威指南 深入理解Elasticsearch

Solr - 按多值字段上的OR搜索的最大匹配对结果进行排序

访问:多值字段

xml 这显示了如何在XLST中呈现多值属性。我将此用于自定义搜索结果webpart。

Elasticsearch学习之深入搜索二 --- 搜索底层原理剖析

我如何优化这个搜索结构?