欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java ES(Elasticsearch) 中的and 和 or 查詢

 更新時間:2022年11月08日 14:41:23   作者:zsq_fengchen  
Elasticsearch 是一個分布式、高擴(kuò)展、高實(shí)時的搜索與數(shù)據(jù)分析引擎,es中match查詢中,查詢字符串分詞后,默認(rèn)是or或者的關(guān)系,這篇文章主要介紹了ES 中的and 和 or 查詢,需要的朋友可以參考下

Elasticsearch 是一個分布式、高擴(kuò)展、高實(shí)時的搜索與數(shù)據(jù)分析引擎。它能很方便的使大量數(shù)據(jù)具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸縮性,能使數(shù)據(jù)在生產(chǎn)環(huán)境變得更有價值。Elasticsearch 的實(shí)現(xiàn)原理主要分為以下幾個步驟,首先用戶將數(shù)據(jù)提交到Elasticsearch 數(shù)據(jù)庫中,再通過分詞控制器去將對應(yīng)的語句分詞,將其權(quán)重和分詞結(jié)果一并存入數(shù)據(jù),當(dāng)用戶搜索數(shù)據(jù)時候,再根據(jù)權(quán)重將結(jié)果排名,打分,再將返回結(jié)果呈現(xiàn)給用戶。

//跨索引查詢

SearchRequest request = new SearchRequest(index1,index2);

在es中想實(shí)現(xiàn)類似于下面的查詢,廢話不多說,es的should查詢代替的是or,但是必須搭配must來使用

select * from table where (a != 1 and b != 1) or (startTime> “2022-05-20” and (a == 1 or b == 1)) 

直接上代碼

@Autowired
    private RestHighLevelClient client;
 public List<Map<String,Object>> searchList(String index1,String index2,Map<String,Object> paramMap
            ,String time,int page,int size) {
        List<Map<String,Object>> hitList = new ArrayList();
        try {
            //搜索請求
            SearchRequest request = new SearchRequest(index1,index2);
            //請求條件構(gòu)建器,這里和mybatis中的自定義查詢有點(diǎn)類型
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

            //等于條件(其他的一些條件)
            if (paramMap != null && !paramMap.isEmpty()) {
                paramMap.forEach((k, v) -> {
                    boolQueryBuilder.must(QueryBuilders.termsQuery(k + KEYWORD, v));
                });
            }
                BoolQueryBuilder query1 = QueryBuilders.boolQuery();
                query1.mustNot(QueryBuilders.termsQuery("a" + ".keyword", "1"));
                query1.mustNot(QueryBuilders.termsQuery("b" + ".keyword", "1"));

                BoolQueryBuilder query2 = QueryBuilders.boolQuery();
                //時間范圍查詢
                if (StringUtils.isNotBlank(time)) {
                    query2.must(QueryBuilders.rangeQuery("startTime"+KEYWORD).from(time));
                }

                BoolQueryBuilder shouldQuery = QueryBuilders.boolQuery();
                shouldQuery.should(QueryBuilders.wildcardQuery("a" , "1"));
                shouldQuery.should(QueryBuilders.wildcardQuery("b" , "1"));
                query2.must(shouldQuery);

                BoolQueryBuilder query3 = QueryBuilders.boolQuery();
                query3.should(query1);
                query3.should(query2);
                boolQueryBuilder.must(query3);

            //把查詢添加放入請求中
            sourceBuilder.query(boolQueryBuilder);
            request.source(sourceBuilder);
            //起始位置
            sourceBuilder.from((page - 1) * size);
            //查詢數(shù)量
            sourceBuilder.size(size);
            sourceBuilder.trackTotalHits(true);
            //建立SearchResponse
            SearchResponse response;

            response = client.search(request, RequestOptions.DEFAULT);
            //封裝查詢的信息
            for (SearchHit hit : response.getHits().getHits()) {
                hitList.add(hit.getSourceAsMap());
                log.debug("查詢結(jié)果:{}", hit.getSourceAsString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return hitList;
    }

將每一塊拆成一個BoolQueryBuilder ,最后or用should()拼接起來

ElasticSearch(es) match or,and查詢

es中match查詢中,查詢字符串分詞后,默認(rèn)是or或者的關(guān)系。

語法

operator:用來控制match查詢匹配詞條的邏輯條件,默認(rèn)值是or,如果設(shè)置為and,表示查詢滿足所有條件

minimum_should_match:當(dāng)operator參數(shù)設(shè)置為or時,該參數(shù)用來控制應(yīng)該匹配的分詞的最少數(shù)量。

當(dāng)參數(shù)operator使用默認(rèn)值時,參數(shù)minimum_should_match設(shè)置每個子查詢應(yīng)該匹配多少個分詞,默認(rèn)值是1,例如,設(shè)置minimum_should_match為1,那么搜索的字段中至少含有一個分詞。

match or實(shí)例

GET /bank/_search
{
  "from":1,
  "size":5,
  "query": {
    "match": {
      "smsContent": {
        "query": "java 學(xué)習(xí)",
        "operator": "or" //或者關(guān)系
        "minimum_should_match": 2
      }
    }
  }
}

smsContent中包含java或者學(xué)習(xí)的內(nèi)容,minimum_should_match等于2表示這2個分詞在內(nèi)容中必須大于2次

match and實(shí)例

GET /bank/_search
{
  "query": {
    "match": {
      "smsContent": {
        "query": "java 學(xué)習(xí)",
        "operator": "and" //并且關(guān)系
      }
    }
  }
}

到此這篇關(guān)于ES 中的and 和 or 查詢的文章就介紹到這了,更多相關(guān)ES 中的and 和 or 查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用jpa的時候set實(shí)體類屬性自動持久化的解決方案

    使用jpa的時候set實(shí)體類屬性自動持久化的解決方案

    這篇文章主要介紹了使用jpa的時候set實(shí)體類屬性自動持久化的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java SpringBoot自動配置原理詳情

    Java SpringBoot自動配置原理詳情

    這篇文章主要介紹了Java SpringBoot自動配置原理詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • drools中query的用法小結(jié)

    drools中query的用法小結(jié)

    這篇文章主要介紹了drools中query的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • Java類加載基本過程詳細(xì)介紹

    Java類加載基本過程詳細(xì)介紹

    這篇文章主要介紹了Java類加載基本過程詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • 解決JavaMail附件名字過長導(dǎo)致的亂碼問題

    解決JavaMail附件名字過長導(dǎo)致的亂碼問題

    這篇文章主要介紹了解決JavaMail附件名字過長導(dǎo)致的亂碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • java.lang.Void 與 void的比較及使用方法介紹

    java.lang.Void 與 void的比較及使用方法介紹

    這篇文章主要介紹了java.lang.Void 與 void的比較及使用方法介紹,小編覺得挺不錯的,這里給大家分享一下,需要的朋友可以參考。
    2017-10-10
  • java如何利用NIO壓縮文件或文件夾

    java如何利用NIO壓縮文件或文件夾

    這篇文章主要介紹了java如何利用NIO壓縮文件或文件夾問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot?Application核心注解詳解

    SpringBoot?Application核心注解詳解

    進(jìn)入到@SpringBootApplication的源碼,可以看到里面組合了三個我們感興趣的注解@ComponentScan、@EnableAutoConfiguration、@SpringBootConfiguration,我們一一分析這三個注解
    2022-10-10
  • SpringBoot系列教程之防重放與操作冪等

    SpringBoot系列教程之防重放與操作冪等

    同一條數(shù)據(jù)被用戶點(diǎn)擊了多次,導(dǎo)致數(shù)據(jù)冗余,需要防止弱網(wǎng)絡(luò)等環(huán)境下的重復(fù)點(diǎn)擊,下面這篇文章主要給大家介紹了關(guān)于SpringBoot系列教程之防重放與操作冪等的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Java棋類游戲?qū)嵺`之單機(jī)版五子棋

    Java棋類游戲?qū)嵺`之單機(jī)版五子棋

    這篇文章主要為大家詳細(xì)介紹了Java棋類游戲中的五子棋實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評論