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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

es dsl多条件组合查询(转)

發(fā)布時(shí)間:2023/12/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 es dsl多条件组合查询(转) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【README】在不評(píng)分的情況下, 推薦使用filter 過濾查詢,因?yàn)椴辉u(píng)分,查詢性能優(yōu)于評(píng)分性能;

轉(zhuǎn):https://www.elastic.co/guide/cn/elasticsearch/guide/current/combining-queries-together.html

下面截圖是我認(rèn)為最有價(jià)值的地方。

【2】全文如下:

現(xiàn)實(shí)的查詢需求從來都沒有那么簡單;它們需要在多個(gè)字段上查詢多種多樣的文本,并且根據(jù)一系列的標(biāo)準(zhǔn)來過濾。為了構(gòu)建類似的高級(jí)查詢,你需要一種能夠?qū)⒍嗖樵兘M合成單一查詢的查詢方法。

你可以用?bool?查詢來實(shí)現(xiàn)你的需求。這種查詢將多查詢組合在一起,成為用戶自己想要的布爾查詢。它接收以下參數(shù):

must

文檔?必須?匹配這些條件才能被包含進(jìn)來。

must_not

文檔?必須不?匹配這些條件才能被包含進(jìn)來。

should

如果滿足這些語句中的任意語句,將增加?_score?,否則,無任何影響。它們主要用于修正每個(gè)文檔的相關(guān)性得分。

filter

必須?匹配,但它以不評(píng)分(查詢性能優(yōu)于其他評(píng)分查詢)、過濾模式來進(jìn)行。這些語句對(duì)評(píng)分沒有貢獻(xiàn),只是根據(jù)過濾標(biāo)準(zhǔn)來排除或包含文檔。

由于這是我們看到的第一個(gè)包含多個(gè)查詢的查詢,所以有必要討論一下相關(guān)性得分是如何組合的。每一個(gè)子查詢都獨(dú)自地計(jì)算文檔的相關(guān)性得分。一旦他們的得分被計(jì)算出來,?bool?查詢就將這些得分進(jìn)行合并并且返回一個(gè)代表整個(gè)布爾操作的得分。

下面的查詢用于查找?title?字段匹配?how to make millions?并且不被標(biāo)識(shí)為?spam?的文檔。那些被標(biāo)識(shí)為?starred?或在2014之后的文檔,將比另外那些文檔擁有更高的排名。如果?兩者?都滿足,那么它排名將更高:

{"bool": {"must": { "match": { "title": "how to make millions" }},"must_not": { "match": { "tag": "spam" }},"should": [{ "match": { "tag": "starred" }},{ "range": { "date": { "gte": "2014-01-01" }}}]} }

拷貝為 cURL在 Sense 中查看?

如果沒有?must?語句,那么至少需要能夠匹配其中的一條?should?語句。但,如果存在至少一條?must?語句,則對(duì)?should?語句的匹配沒有要求。

增加帶過濾器(filtering)的查詢

如果我們不想因?yàn)槲臋n的時(shí)間而影響得分,可以用?filter?語句來重寫前面的例子:

{"bool": {"must": { "match": { "title": "how to make millions" }},"must_not": { "match": { "tag": "spam" }},"should": [{ "match": { "tag": "starred" }}],"filter": {"range": { "date": { "gte": "2014-01-01" }} }} }

拷貝為 cURL在 Sense 中查看?

?

range 查詢已經(jīng)從?should?語句中移到?filter?語句

通過將 range 查詢移到?filter?語句中,我們將它轉(zhuǎn)成不評(píng)分的查詢,將不再影響文檔的相關(guān)性排名。由于它現(xiàn)在是一個(gè)不評(píng)分的查詢,可以使用各種對(duì) filter 查詢有效的優(yōu)化手段來提升性能。

所有查詢都可以借鑒這種方式。將查詢移到?bool?查詢的?filter?語句中,這樣它就自動(dòng)的轉(zhuǎn)成一個(gè)不評(píng)分的 filter 了。

如果你需要通過多個(gè)不同的標(biāo)準(zhǔn)來過濾你的文檔,bool?查詢本身也可以被用做不評(píng)分的查詢。簡單地將它放置到?filter?語句中并在內(nèi)部構(gòu)建布爾邏輯:

{"bool": {"must": { "match": { "title": "how to make millions" }},"must_not": { "match": { "tag": "spam" }},"should": [{ "match": { "tag": "starred" }}],"filter": {"bool": { "must": [{ "range": { "date": { "gte": "2014-01-01" }}},{ "range": { "price": { "lte": 29.99 }}}],"must_not": [{ "term": { "category": "ebooks" }}]}}} }

拷貝為 cURL在 Sense 中查看?

?

將?bool?查詢包裹在?filter?語句中,我們可以在過濾標(biāo)準(zhǔn)中增加布爾邏輯

通過混合布爾查詢,我們可以在我們的查詢請(qǐng)求中靈活地編寫 scoring 和 filtering 查詢邏輯。

constant_score 查詢

盡管沒有?bool?查詢使用這么頻繁,constant_score?查詢也是你工具箱里有用的查詢工具。它將一個(gè)不變的常量評(píng)分應(yīng)用于所有匹配的文檔。它被經(jīng)常用于你只需要執(zhí)行一個(gè) filter 而沒有其它查詢(例如,評(píng)分查詢)的情況下。

可以使用它來取代只有 filter 語句的?bool?查詢。在性能上是完全相同的,但對(duì)于提高查詢簡潔性和清晰度有很大幫助。

{"constant_score": {"filter": {"term": { "category": "ebooks" } }} }

拷貝為 cURL在 Sense 中查看?

?

term?查詢被放置在?constant_score?中,轉(zhuǎn)成不評(píng)分的 filter。這種方式可以用來取代只有 filter 語句的?bool?查詢。

?

?

?

?

?

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的es dsl多条件组合查询(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。