5.terms搜索多個值以及多值搜索結果優化
主要知識點
terms搜索多個值,並和term的比較
一、term和terms
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、搜索articleID為KDKE-B-9947-#kL5或QQPX-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"]
三、總結
(1)terms多值搜索用列表的形式表示
(2)優化terms多值搜索的結果,獲取我們指定的特定結果集
(3)terms相當於SQL中的in語句
5.terms搜索多個值以及多值搜索結果優化