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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

ElasticSearch(must、should、filter、must_not) bool的查询

發布時間:2023/12/13 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch(must、should、filter、must_not) bool的查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ElasticSearch的組合查詢

現實的查詢需求從來都沒有那么簡單;它們需要在多個字段上查詢多種多樣的文本,并且根據一系列的標準來過濾。為了構建類似的高級查詢,你需要一種能夠將多查詢組合成單一查詢的查詢方法。

你可以用bool查詢來實現你的需求。這種查詢將多查詢組合在一起,成為用戶自己想要的布爾查詢(Bool)。

代碼示例:

//new 一個查詢對象  
BoolQueryBuilder boolQueryBuilder1 = QueryBuilders.boolQuery();
//也可以
BoolQueryBuilder boolQueryBuilder = boolQuery();

它主要的幾個方法如下:

1.must

文檔必須匹配這些條件才能被包含進來。相當于sql中的and

2.must_not

文檔必須不匹配這些條件才能被包含進來。相當于sql中的not

3.should

如果滿足這些語句中的任意語句,將增加_score,否則,無任何影響。它們主要用于修正每個文檔的相關性得分。相當于sql中的or

4.filter

必須匹配,但它以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標準來排除或包含文檔。

構造查詢條件

1. termQuery:精確查詢(不分詞)

使用termQuery要注意的是,Elasticsearch5之后,取消了string類型,將原來的string類型拆分為text和keyword兩種類型,他們的區別在于text會對字段進行分詞處理,而keyword則不會。

2. matchQuery:匹配查詢(分詞)

match query搜索的時候,首先會解析查詢字符串,進行分詞,然后查詢,所以假如我搜索的條件輸入的是"六年級",則會把各個年級(一年級至九年級)的數據都查詢出來,因為其中都包含’年級’ 。

3. queryString:精確查詢

4. wildcardQuery:模糊查詢

5. rangeQuery:范圍查詢

代碼示例:

  BoolQueryBuilder boolQueryBuilder = boolQuery();
         //精確查詢
        if (searchDto.getId() != null) {
            boolQueryBuilder.must().add(termQuery("id", searchDto.getId()));
        }
        //模糊查詢
        if (searchDto.getSkuLike() != null) {
            boolQueryBuilder.must().add(wildcardQuery("sku",StrUtil.format("*{}*",searchDto.getSkuLike())));
        }
       //范圍查詢
        if (searchDto.getSupplierAddTimeStart() != null) {
            boolQueryBuilder.must().add(rangeQuery("create_time").gte(searchDto.getSupplierAddTimeStart()));
        }
        //
        if (searchDto.getSupplierAddTimeEnd() != null) {
            boolQueryBuilder.must().add(rangeQuery("create_time").lte(searchDto.getSupplierAddTimeEnd()));
        }
        // or查詢的情況 (Condition 1 OR Condition 2) AND Condition3 
        if (searchDto.getKeyword() != null) {
            BoolQueryBuilder childBoolQueryBuilder = boolQuery();
            childBoolQueryBuilder.should().add(wildcardQuery("sku",StrUtil.format("*{}*",searchDto.getKeyword())));
            childBoolQueryBuilder.should().add(wildcardQuery("title",StrUtil.format("*{}*",searchDto.getKeyword())));
            boolQueryBuilder.must().add(childBoolQueryBuilder);
        }

總結

以上是生活随笔為你收集整理的ElasticSearch(must、should、filter、must_not) bool的查询的全部內容,希望文章能夠幫你解決所遇到的問題。

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