1. 程式人生 > >5.terms搜索多個值以及多值搜索結果優化

5.terms搜索多個值以及多值搜索結果優化

elastics tro clas span art pos search field body

主要知識點

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搜索多個值以及多值搜索結果優化