日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 白话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搜索多个值以及多值搜索结果优化的全部內容,希望文章能夠幫你解決所遇到的問題。

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