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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ElasticSearch 复合查询

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch 复合查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用bool查詢
接收以下參數:
must:文檔必須匹配這些條件才能被包含進來。
must _not:文檔必須不匹配這些條件才能被包含進來。
should:如果滿足這些語句中的任意語句,將增加。score, 否則,無任何影響。它們主要用于修正每個文檔的相關性得分。
filter:必須匹配,但它以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標準來排除或包含文檔。
相關性得分是如何組合的。每一個子查詢都獨自地計算文檔的相關性得分。一旦他們的得分被計算出來,bool 查詢就將這些得分進行合并并且返回一個代表整
個布爾操作的得分。
下面的查詢用于查找title字段匹配how to make millions并且不被標識為spam的文檔。那些被標識為starred或在2014之后的文檔,將比另外那些文檔擁
有更高的排名。如果兩者都滿足,那么它排名將更高:

復合查詢語句:

#復合查詢 GET /lib3/user/_search {"query": {"bool": {"must": { "match": {"interests": "changge" }},"must_not": { "match": { "interests": "1vyou" }},"should": [{"match": { "address": "bei jing" }},{"range": { "birthday": { "gte": "1996-01-01" }}}]}} }GET /lib3/user/_search {"query": {"bool": {"must": { "match": { "interests": "changge" }},"must_not": { "match": { "interests": "1vyou" }},"should": [{"match": { "address": "bei jing" }}],"filter": {"range":{ "birthday": { "gte": "1996-01-01" }}}}} }

如果沒有must語詢,那么至少需要能夠匹配其中的一條should語句。但,如果存在至少一條 must語句,則對should語句的匹配沒有要求。如果我們不想因為文檔的時間而影響得分,可以用filter語句來重寫前面的例子:?

?

?

GET /lib3/user/_search {"query": {"bool": {"must": { "match": { "interests": "changge" }},"must_not": { "match": { "interests": "1vyou" }},"should":[{"match": { "address": "bei jing" }}],"filter":{"bool":{"must": [{"range": { "birthday": { "gte": "1990-01-01" }}},{"range": { "age": { "lte": 30}}}],"must_not":[{ "term": { "age": "29" }}]}}}} }

通過將range查詢移到filter語句中,我們將它轉成不評分的查詢,將不再影響文檔的相關性排名。由于它現在是一個不評分的查詢, 可以使用各種對filter查詢有效的優化手段來提升性能。bool查詢本身也可以被用做不評分的查詢。簡單地將它放置到filter語句中并在內部構建布爾邏輯:

?

?

?

?

constant_score查詢?
它將一個不變的常量評分應用于所有些配的文檔。它被經常用于你只需要執行一個filter 而沒有其它查詢(例如, 評分查詢)的情況下。
{ "constant_score":{ filter:{ "term":{ "category": "ebooks" }}}}
term查詢被放置在constant_score中,轉成不評分的filter.這種方式可以用來取代只有filter 語句的bool查詢。

constant_score的用處
當我們不關心檢索詞頻率TF(Term Frequency)對搜索結果排序的影響時,可以使用constant_score將查詢語句query或者過濾語句filter包裝起來。

檢索詞頻率:檢索詞在該字段出現的頻率。出現頻率越高,相關性也越高。字段中出現過5次要比只出現過1次的相關性高。

GET /lib3/user/_search {"query": {"constant_score": {"filter": {"term": { "interests": "changge" }}}} }

?

總結

以上是生活随笔為你收集整理的ElasticSearch 复合查询的全部內容,希望文章能夠幫你解決所遇到的問題。

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