日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/21 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 白话Elasticsearch04- 结构化搜索之使用terms query搜索多个值以及多值搜索结果优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • terms概述
  • 準備數據
  • 小例子
    • 搜索articleID為KDKE-B-9947-#kL5或QQPX-R-3956-#aD8的帖子
    • 搜索tag中包含java的帖子
  • 優化搜索結果,僅僅搜索tag只包含java的帖子

terms概述

繼續跟中華石杉老師學習ES,第三篇

課程地址: https://www.roncoo.com/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語句

總結

以上是生活随笔為你收集整理的白话Elasticsearch04- 结构化搜索之使用terms query搜索多个值以及多值搜索结果优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。