国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮)

這篇具有很好參考價(jià)值的文章主要介紹了ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、基于 JavaRestClient 查詢文檔

1.1、查詢 API 演示

1.1.1、查詢基本框架

DSL 請(qǐng)求的對(duì)應(yīng)格式

響應(yīng)的解析

1.1.2、全文檢索查詢

1.1.3、精確查詢

1.1.4、復(fù)合查詢

1.1.5、排序和分頁(yè)

1.1.6、高亮


一、基于 JavaRestClient 查詢文檔


1.1、查詢 API 演示

1.1.1、查詢基本框架

接下里通過(guò)一個(gè) match_all 查詢所有,來(lái)演示以下基本的 API.

    @Test
    public void testMatchAll() throws IOException {
        //1.準(zhǔn)備 SearchRequest
        SearchRequest request = new SearchRequest("hotel");
        //2.準(zhǔn)備參數(shù)
        request.source().query(QueryBuilders.matchAllQuery());
        //3.發(fā)送請(qǐng)求,并接收響應(yīng)
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //4.解析響應(yīng)
        handlerResponse(response);
    }

    /**
     * 處理響應(yīng)
     * @param response
     */
    private void handlerResponse(SearchResponse response) {
        //1.解析結(jié)果
        SearchHits hits = response.getHits();
        //獲取總條數(shù)
        long total = hits.getTotalHits().value;
        SearchHit[] hits1 = hits.getHits();
        for(SearchHit searchHit : hits1) {
            //獲取source
            String json = searchHit.getSourceAsString();
            System.out.println(json);
        }
    }

由上可以看出查詢的基本步驟如下:

  1. 創(chuàng)建 SeaechRequest 對(duì)象,指定索引庫(kù).
  2. Request.source() 準(zhǔn)備參數(shù),也就是 DSL.
    1. 通過(guò) QueryBuilders 構(gòu)建查詢條件.
    2. 傳入?Request.source() 的 query() 方法,構(gòu)建好完整的查詢.
  3. 發(fā)送請(qǐng)求,得到結(jié)果.
  4. 解析結(jié)果(又外而內(nèi),逐層解析).
DSL 請(qǐng)求的對(duì)應(yīng)格式

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

DSL 語(yǔ)句的構(gòu)建是通過(guò) HighLevelRestClient 中的 Resource 實(shí)現(xiàn)的,其中包含了 查詢、排序】分頁(yè)、高亮等所有功能.

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

其中? query 表示查詢的意思,他的查詢條件的是由 QueryBuilders 的工具類提供的,包含了各種查詢方法.

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

響應(yīng)的解析

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

響應(yīng)解析這里,可以在 Kibana 上通過(guò)查詢結(jié)果,對(duì)比著看出 API 的調(diào)用關(guān)系.

1.1.2、全文檢索查詢

全文檢索的 match 和 multi_match 查詢和前面演示的 match_all 調(diào)用的?API 基本一致,差別就是查詢條件,也就是 query 部分(通過(guò) QueryBuilders 構(gòu)建的條件不一樣).

    @Test
    public void testMatch() throws IOException {
        //1.準(zhǔn)備 SearchRequest
        SearchRequest request = new SearchRequest("hotel");
        //2.準(zhǔn)備參數(shù)
        request.source().query(QueryBuilders.matchQuery("brand", "如家"));
        //3.發(fā)送請(qǐng)求,并接收響應(yīng)
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //4.解析響應(yīng)
        handlerResponse(response);
    }

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

multi_match 也是如此,只是可以支持多個(gè)參數(shù)查詢.

    @Test
    public void testMultiMatch() throws IOException {
        //1.準(zhǔn)備 SearchRequest
        SearchRequest request = new SearchRequest("hotel");
        //2.準(zhǔn)備參數(shù)
        request.source().query(QueryBuilders.multiMatchQuery("如家", "brand", "name"));
        //3.發(fā)送請(qǐng)求,并接收響應(yīng)
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //4.解析響應(yīng)
        handlerResponse(response);
    }

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

運(yùn)行結(jié)果:

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

1.1.3、精確查詢

精確查詢常見的有 term 查詢 和 range 查詢,同樣利用 QueryBuilders 實(shí)現(xiàn).

    @Test
    public void testTerm() throws IOException {
        //1.準(zhǔn)備 SearchRequest
        SearchRequest request = new SearchRequest("hotel");
        //2.準(zhǔn)備參數(shù)
        request.source().query(QueryBuilders.termQuery("city", "上海"));
        //3.發(fā)送請(qǐng)求,并接收響應(yīng)
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //4.解析響應(yīng)
        handlerResponse(response);
    }

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

range 查詢也是如此.

    @Test
    public void testRange() throws IOException {
        //1.準(zhǔn)備 SearchRequest
        SearchRequest request = new SearchRequest("hotel");
        //2.準(zhǔn)備參數(shù)
        request.source().query(QueryBuilders.rangeQuery("price").gte(100).lte(200)); //鏈?zhǔn)秸{(diào)用
        //3.發(fā)送請(qǐng)求,并接收響應(yīng)
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //4.解析響應(yīng)
        handlerResponse(response);
    }

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

1.1.4、復(fù)合查詢

布爾查詢是一個(gè)或多個(gè)查詢子句的組合. 子查詢的組合方式有:

  • must:必須匹配的查詢條件,類似 “與”.
  • should:選擇性匹配的查詢條件,類似 “或”.
  • must_not:必須不匹配,不參與算分,類似 “非”.
  • filter:必須匹配,不參與算分

RestAPI 中也提供 BoolQueryBuilder 條件構(gòu)建方法,用來(lái)添加上述條件.

    @Test
    public void testBoolQuery() throws IOException {
        //1.準(zhǔn)備 SearchRequest
        SearchRequest request = new SearchRequest("hotel");
        //2.準(zhǔn)備參數(shù)
        BoolQueryBuilder booleanQuery = QueryBuilders.boolQuery();
        booleanQuery.must(QueryBuilders.termQuery("city", "上海"));
        booleanQuery.filter(QueryBuilders.rangeQuery("price").lte("200"));
        request.source().query(booleanQuery); //鏈?zhǔn)秸{(diào)用
        //3.發(fā)送請(qǐng)求,并接收響應(yīng)
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //4.解析響應(yīng)
        handlerResponse(response);
    }

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

1.1.5、排序和分頁(yè)

對(duì)于搜索結(jié)果的排序和分頁(yè)與? query 是同級(jí)參數(shù),對(duì)應(yīng) API 如下.

    @Test
    public void testFromSize() throws IOException {
        //1.準(zhǔn)備 SearchRequest
        SearchRequest request = new SearchRequest("hotel");
        //2.準(zhǔn)備參數(shù)
        request.source().query(QueryBuilders.matchAllQuery());
        //分頁(yè) offset=20 size=10
        request.source().from(20).size(10);
        //降序排序
        request.source().sort("price", SortOrder.DESC);
        //3.發(fā)送請(qǐng)求,并接收響應(yīng)
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //4.解析響應(yīng)
        handlerResponse(response);
    }

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

1.1.6、高亮

高亮的? API 包括請(qǐng)求構(gòu)建 DSL 語(yǔ)句 和 結(jié)果解析 兩個(gè)部分.

請(qǐng)求構(gòu)建如下:

    @Test
    public void testHighLighter() throws IOException {
        //1.準(zhǔn)備 SearchRequest
        SearchRequest request = new SearchRequest("hotel");
        //2.準(zhǔn)備參數(shù)
        request.source().query(QueryBuilders.matchQuery("brand", "如家"));
        request.source().highlighter(new HighlightBuilder()
                .field("name")
                .requireFieldMatch(false));
        //3.發(fā)送請(qǐng)求,并接收響應(yīng)
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //4.解析響應(yīng)
        handlerResponse(response);
    }

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

響應(yīng)解析如下 :

    private void handlerResponse(SearchResponse response) throws JsonProcessingException {
        //1.解析結(jié)果
        SearchHits hits = response.getHits();
        //獲取總條數(shù)
        long total = hits.getTotalHits().value;
        SearchHit[] hits1 = hits.getHits();
        for(SearchHit searchHit : hits1) {
            //獲取source
            String json = searchHit.getSourceAsString();
            System.out.println(json);
            //2.處理高亮
            //獲取高亮
            Map<String, HighlightField> highlightFieldMap = searchHit.getHighlightFields();
            if(!CollectionUtils.isEmpty(highlightFieldMap)) {
                //獲取高亮字段的 value
                HighlightField highlightField = highlightFieldMap.get("name");
                if(highlightField != null) {
                    //取出高亮結(jié)果數(shù)組中的第一個(gè),這里是酒店名稱
                    String name = highlightField.getFragments()[0].string();
                    //對(duì)高亮字段的處理(這里打印做演示)
                    System.out.println(name);
                }
            }
        }
    }

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

運(yùn)行后可以看到通過(guò) sout 打印出的“高亮”字段(最后會(huì)傳輸給前端 ,讓前端處理高亮. 后端只是標(biāo)記出了哪些字段需要高亮處理)

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-730261.html

到了這里,關(guān)于ElasticSearch - 基于 JavaRestClient 查詢文檔(match、精確、復(fù)合查詢,以及排序、分頁(yè)、高亮)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ElasticSearch系列 - SpringBoot整合ES:多個(gè)精確值查詢 terms

    ElasticSearch - SpringBoot整合ES:多個(gè)精確值查詢 terms 01. ElasticSearch terms 查詢支持的數(shù)據(jù)類型 在Elasticsearch中,terms查詢支持多種數(shù)據(jù)類型,包括: 字符串類型:可以將多個(gè)字符串值作為數(shù)組傳遞給terms查詢,以匹配包含任何一個(gè)指定字符串值的文檔。 數(shù)值類型:可以將多個(gè)數(shù)值作

    2024年02月16日
    瀏覽(28)
  • Elasticsearch:了解和使用 match 查詢

    Match query 是針對(duì)多個(gè)用例的最常見和最強(qiáng)大的查詢。 它是一個(gè)全文搜索查詢,返回符合指定條件的文檔。 match query 可以即興使用來(lái)查詢多個(gè)選項(xiàng)。在我之前的文章 “開始使用 Elasticsearch (2)” 對(duì)它有很多的描述。 讓我們首先看看這個(gè)片段顯示的 match query 的格式: 正如你

    2024年02月07日
    瀏覽(18)
  • 【Elasticsearch】ES精確查詢和范圍查詢,ES時(shí)間字段排序?qū)嵗?,ES倒排索引介紹

    【Elasticsearch】ES精確查詢和范圍查詢,ES時(shí)間字段排序?qū)嵗?,ES倒排索引介紹

    termQuery matchQuery 模糊查詢 multiMatchQuery 多個(gè)字段模糊查詢 如果時(shí)間字段寫入時(shí)用的類型是Text,可以用“時(shí)間字段.keyword”來(lái)處理 #查詢前傳入分頁(yè)參數(shù) #分頁(yè)后拿到總記錄數(shù) 把文檔D對(duì)應(yīng)到的映射轉(zhuǎn)換為到文檔ID的映射,每個(gè)都對(duì)應(yīng)著一系列的文檔,這些文

    2024年02月15日
    瀏覽(126)
  • Elasticsearch 中的 term、terms 和 match 查詢

    目錄 term 查詢 terms 查詢 match 查詢 注意事項(xiàng) 結(jié)論 ? ?Elasticsearch 提供了多種查詢類型,用于不同的搜索需求。 term 、 terms 和 match 是其中最常用的一些查詢類型。下面分別介紹每種查詢類型的用法和特點(diǎn)。 ? term 查詢用于精確值匹配。它通常用于(keyword)類型的字段,

    2024年04月14日
    瀏覽(40)
  • Elasticsearch:Multi-match (multi_match) 及 Disjunction max 查詢

    多重匹配(multi_match)查詢,顧名思義就是跨多個(gè)字段搜索查詢。 例如,如果我們想在 title、synopsis 和 tags 三個(gè)字段中搜索 Java 一詞,那么 multi_match query 就是答案。另外,很多開發(fā)者還不是很清楚 multi-match 及 disjunction max query 的區(qū)別和聯(lián)系。在今天的文章中,我將詳述這兩個(gè)

    2024年02月05日
    瀏覽(24)
  • ElasticSearch中查詢語(yǔ)句用法(match、match_phrase、multi_match、query_string)

    ElasticSearch中查詢語(yǔ)句用法(match、match_phrase、multi_match、query_string)

    略 1.1 不同字段權(quán)重 ????????如果需要為不同字段設(shè)置不同權(quán)重,可以考慮使用 bool 查詢的 should 子句來(lái)組合多個(gè) match 查詢,并為每個(gè) match 查詢?cè)O(shè)置不同的權(quán)重。 ????????上面的查詢將在 product_name 字段和 description 字段中搜索包含 \\\"apple\\\" 的文檔,并為 product_name 字段設(shè)

    2024年02月10日
    瀏覽(16)
  • ElasticSearch系列 - SpringBoot整合ES之全文搜索匹配查詢 match

    官方文檔地址:https://www.elastic.co/guide/en/elasticsearch/reference/index.html 權(quán)威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/structured-search.html 1. 數(shù)據(jù)準(zhǔn)備 官方測(cè)試數(shù)據(jù)下載地址:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip ,數(shù)據(jù)量很大,我們自己構(gòu)造數(shù)據(jù)吧。 2. m

    2023年04月08日
    瀏覽(33)
  • ElasticSearch系列 - SpringBoot整合ES:多字段查詢 multi_match

    1. 什么是 ElasticSearch 的 multi_match 查詢? 有時(shí)用戶需要在多個(gè)字段中查詢,除了使用布爾查詢封裝多個(gè)match查詢之外,可替代的方案是使用multi_match??梢栽趍ulti_match的query子句中組織數(shù)據(jù)匹配規(guī)則,并在fields子句中指定需要搜索的字段列表。 以下是一個(gè)示例multi-match查詢

    2023年04月21日
    瀏覽(24)
  • ElasticSearch系列 - SpringBoot整合ES:短語(yǔ)匹配查詢 match_phrase

    1. ElasticSearch match_phrase查詢是什么?它與match查詢有什么區(qū)別? match_phrase查詢是一種用于匹配短語(yǔ)的查詢方式,可以用于精確匹配多個(gè)單詞組成的短語(yǔ)。它會(huì)將查詢字符串分解成單詞,然后按照順序匹配文檔中的單詞,只有當(dāng)文檔中的單詞順序與查詢字符串中的單詞順序完全

    2024年02月12日
    瀏覽(18)
  • 如何使用ES做簡(jiǎn)單的時(shí)間條件過(guò)濾+模糊查詢+精確匹配+關(guān)鍵字排除,查詢 elasticsearch查詢結(jié)果包含或排除某些字段、_source查詢出需要的屬性名稱

    目錄 一、時(shí)間條件過(guò)濾+模糊查詢+精確匹配+排除 1. 查詢出包含 log_geo 的數(shù)據(jù) “wildcard”: { “message”: “l(fā)og_geo” } 2. 查詢某個(gè)時(shí)間段的數(shù)據(jù) 3. 條件查詢與條件排除數(shù)據(jù) 4. from 表示起始的記錄的ID 5. size 表示顯示的記錄數(shù) 6.sort排序 desc降序、asc升序? 7.should查詢?cè)趍ysql中

    2024年01月18日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包