最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

//跨索引查詢(xún)

SearchRequest request = new SearchRequest(index1,index2);

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

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 {
            //搜索請(qǐng)求
            SearchRequest request = new SearchRequest(index1,index2);
            //請(qǐng)求條件構(gòu)建器,這里和mybatis中的自定義查詢(xún)有點(diǎn)類(lèi)型
            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();
                //時(shí)間范圍查詢(xún)
                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);

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

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

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

ElasticSearch(es) match or,and查詢(xún)

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

語(yǔ)法

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

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

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

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個(gè)分詞在內(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 查詢(xún)的文章就介紹到這了,更多相關(guān)ES 中的and 和 or 查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java用20行代碼實(shí)現(xiàn)抖音小視頻批量轉(zhuǎn)換為gif動(dòng)態(tài)圖

    Java用20行代碼實(shí)現(xiàn)抖音小視頻批量轉(zhuǎn)換為gif動(dòng)態(tài)圖

    這篇文章主要介紹了Java用20行代碼實(shí)現(xiàn)抖音小視頻批量轉(zhuǎn)換為gif動(dòng)態(tài)圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Elasticsearch 在 Java 中的使用示例教程

    Elasticsearch 在 Java 中的使用示例教程

    本文介紹了如何在Java中使用Elasticsearch,涵蓋了連接、基本CRUD 操作、復(fù)雜查詢(xún)、索引管理和聚合操作等方面的內(nèi)容,通過(guò)示例,開(kāi)發(fā)者可以一步步地掌握如何在 Java 項(xiàng)目中集成 Elasticsearch,并利用其強(qiáng)大的搜索和分析功能來(lái)構(gòu)建高效的應(yīng)用程序,感興趣的朋友一起看看吧
    2024-08-08
  • spring注解@Service注解的使用解析

    spring注解@Service注解的使用解析

    這篇文章主要介紹了spring注解@Service注解的使用解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java字符串相似度算法

    java字符串相似度算法

    這篇文章主要介紹了java字符串相似度算法,是Java實(shí)現(xiàn)比較典型的算法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Java多線(xiàn)程之Interrupt中斷線(xiàn)程詳解

    Java多線(xiàn)程之Interrupt中斷線(xiàn)程詳解

    Interrupt 的其作用是"中斷"線(xiàn)程, 但實(shí)際上線(xiàn)程仍會(huì)繼續(xù)運(yùn)行, 這是一個(gè)非常容易混淆的概念. Interrupt 的真正作用是給線(xiàn)程對(duì)象設(shè)置一個(gè)中斷標(biāo)記, 并不會(huì)影響線(xiàn)程的正常運(yùn)行,需要的朋友可以參考下
    2021-05-05
  • 如何使用Spring RestTemplate訪(fǎng)問(wèn)restful服務(wù)

    如何使用Spring RestTemplate訪(fǎng)問(wèn)restful服務(wù)

    這篇文章主要介紹了如何使用Spring RestTemplate訪(fǎng)問(wèn)restful服務(wù),詳細(xì)的介紹了什么是RestTemplate以及簡(jiǎn)單實(shí)現(xiàn),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-10-10
  • springboot多模塊項(xiàng)目mvn打包遇到存在依賴(lài)但卻無(wú)法發(fā)現(xiàn)符號(hào)問(wèn)題

    springboot多模塊項(xiàng)目mvn打包遇到存在依賴(lài)但卻無(wú)法發(fā)現(xiàn)符號(hào)問(wèn)題

    在SpringBoot多模塊項(xiàng)目中,如果遇到依賴(lài)存在但無(wú)法發(fā)現(xiàn)符號(hào)的問(wèn)題,常見(jiàn)原因可能是pom.xml配置問(wèn)題,例如,如果某個(gè)模塊僅作為依賴(lài)而不是啟動(dòng)工程,不應(yīng)在其pom中配置spring-boot-maven-plugin插件,因?yàn)檫@將影響jar包的生成方式
    2024-09-09
  • Spring系統(tǒng)屬性及spring.properties配置文件示例詳解

    Spring系統(tǒng)屬性及spring.properties配置文件示例詳解

    spring中有一個(gè)SpringProperties類(lèi),來(lái)保存spring的系統(tǒng)屬性,本文結(jié)合實(shí)例代碼對(duì)Spring系統(tǒng)屬性及spring.properties配置文件相關(guān)知識(shí)給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-07-07
  • Java開(kāi)發(fā)之HashMap的使用和遍歷

    Java開(kāi)發(fā)之HashMap的使用和遍歷

    這篇文章主要介紹了Java開(kāi)發(fā)之HashMap的使用和遍歷的相關(guān)資料,這里提供一個(gè)HashMap的簡(jiǎn)單實(shí)例并結(jié)合List使用,需要的朋友可以參考下
    2017-08-08
  • 詳解java中命令行模式的實(shí)現(xiàn)

    詳解java中命令行模式的實(shí)現(xiàn)

    命令模式是一種行為設(shè)計(jì)模式,它允許您將請(qǐng)求封裝為對(duì)象,以便您可以將其參數(shù)化、隊(duì)列化、記錄和撤銷(xiāo),本文主要為大家介紹一下java實(shí)現(xiàn)命令模式的示例代碼,需要的可以參考下
    2023-09-09

最新評(píng)論

扬州市| 大连市| 高淳县| 赤壁市| 原阳县| 上高县| 启东市| 平罗县| 贵州省| 深水埗区| 吉木乃县| 新野县| 察哈| 绥宁县| 丹巴县| 泾阳县| 阳高县| 甘孜县| 黎平县| 日照市| 靖边县| 饶平县| 志丹县| 瓮安县| 平遥县| 嘉定区| 英吉沙县| 大姚县| 宁河县| 玛多县| 黄龙县| 姜堰市| 黑水县| 太谷县| 丹棱县| 新昌县| 浙江省| 崇州市| 汾阳市| 常山县| 聊城市|