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

elasticsearch使用template搜索多個索引并且高亮返回結(jié)果

這篇具有很好參考價值的文章主要介紹了elasticsearch使用template搜索多個索引并且高亮返回結(jié)果。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

由于搜索多個索引沒辦法以定義好的Entity來接收quey的結(jié)果,所以keyword搜索時不能按照以前的方式來直接分頁搜索

AggregatedPage<ElasticService> elasticServices = elasticsearchTemplate.queryForPage(nativeSearchQuery, ElasticService.class);

所以這里選擇重寫搜索方法來自定義map返回結(jié)果,實(shí)現(xiàn)手動分頁和替換高亮搜索的結(jié)果文章來源地址http://www.zghlxwxcb.cn/news/detail-514119.html

		Pageable pageable = PageRequest.of(pageNum, pageSize, Sort.Direction.DESC, "update_time");
        // 關(guān)鍵字可在name字段進(jìn)行通配符搜索
        QueryBuilder nameWildcardNameQuery = QueryBuilders.wildcardQuery("name", "*" + keywords + "*");
        QueryBuilder categoryNameWildcardNameQuery = QueryBuilders.wildcardQuery("categoryName", "*" + keywords + "*");
        // name字段boost提高,從而match之后提高得分
        Map<String, Float> fieldMap = new HashMap<>();
        fieldMap.put("name", 5.0f);
        fieldMap.put("categoryName", 4.5f);
        fieldMap.put("namespace", 1.0f);
        fieldMap.put("description", 0.5f);
        QueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery(keywords).fields(fieldMap);
        // should不會影響搜索結(jié)果,但match多了可提高得分
       QueryBuilder keywordMatchQuery = QueryBuilders.boolQuery().should(nameWildcardNameQuery).should(categoryNameWildcardNameQuery).should(multiMatchQuery);


       //設(shè)置高亮條件
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.requireFieldMatch(false); // 如果要多個字段高亮,這項要為false
        highlightBuilder.preTags("<span style=\"color:#2ba6ee\">"); // 高亮設(shè)置
        highlightBuilder.postTags("</span>");
        highlightBuilder.field("name");
        highlightBuilder.field("description");
        highlightBuilder.field("category_name");

        NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
                .withIndices("template_graph_contact", "tradition_ml_template_group")
                .withQuery(
                        QueryBuilders.boolQuery()
                                .must(keywordMatchQuery)
                )
                .withHighlightBuilder(highlightBuilder)
                .withPageable(pageable)
                .build();

        //查詢后自己構(gòu)造返回結(jié)果,手動分頁
        Map search = elasticsearchTemplate.query(nativeSearchQuery, response -> {
                    SearchHits hits = response.getHits();
                    Map map = new HashMap();
                    //手動分頁
                    double totalPage = Math.ceil(hits.totalHits / (double)pageSize);
                    map.put("totalElements", hits.totalHits);
                    map.put("totalPages", Double.valueOf(totalPage).intValue());
                    map.put("pageNumber", pageNum);
                    map.put("pageSize", pageSize);
                    List<Map> list = new ArrayList<>();
                    for (SearchHit hit : hits) {
                        if (hits.getHits().length <= 0) {
                            return null;
                        }
                        Map<String, Object> source = hit.getSourceAsMap();

                        //將高亮部分進(jìn)行替換
                        HighlightField name = hit.getHighlightFields().get("name");
                        HighlightField description = hit.getHighlightFields().get("description");
                        HighlightField categoryName = hit.getHighlightFields().get("category_name");
                        if (name != null) {
                            source.replace("name", name.fragments()[0].toString());
                        }
                        if (description != null) {
                            source.replace("description", description.fragments()[0].toString());
                        }
                        if (categoryName != null) {
                            source.replace("category_name", categoryName.fragments()[0].toString());
                        }
                        list.add(source);
                    }
                    map.put("source", list);
                    return map;
                });

到了這里,關(guān)于elasticsearch使用template搜索多個索引并且高亮返回結(jié)果的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • elasticsearch中創(chuàng)建索引模板_index_template

    elasticsearch中創(chuàng)建索引模板_index_template

    ????????索引模版是創(chuàng)建索引時自動應(yīng)用提前設(shè)置好的settings、mappings和aliases,通過索引的名稱進(jìn)行匹配。 ????????對索引模版的更改時不會影響目前已經(jīng)根據(jù)索引模版創(chuàng)建的索引。 ????????使用索引模版可以省去創(chuàng)建索引時再次指定settings、mappings、aliases的步驟,

    2024年02月01日
    瀏覽(25)
  • yyds,Elasticsearch Template自動化管理新索引創(chuàng)建

    yyds,Elasticsearch Template自動化管理新索引創(chuàng)建

    一、什么是Elasticsearch Template? Elasticsearch Template是一種將預(yù)定義模板應(yīng)用于新索引的功能。在索引創(chuàng)建時,它可以自動為新索引應(yīng)用已定義的模板。Template功能可用于定義索引的映射、設(shè)置和別名等。它是一種自動化管理索引創(chuàng)建的方式,使用戶可以在大量索引上快速而一致

    2023年04月08日
    瀏覽(27)
  • 【ElasticSearch】使用 Java 客戶端 RestClient 實(shí)現(xiàn)對文檔的查詢操作,以及對搜索結(jié)果的排序、分頁、高亮處理

    【ElasticSearch】使用 Java 客戶端 RestClient 實(shí)現(xiàn)對文檔的查詢操作,以及對搜索結(jié)果的排序、分頁、高亮處理

    在 Elasticsearch 中,通過 RestAPI 進(jìn)行 DSL 查詢語句的構(gòu)建通常是通過 HighLevelRestClient 中的 resource() 方法來實(shí)現(xiàn)的。該方法包含了查詢、排序、分頁、高亮等所有功能,為構(gòu)建復(fù)雜的查詢提供了便捷的接口。 RestAPI 中構(gòu)建查詢條件的核心部分是由一個名為 QueryBuilders 的工具類提供

    2024年01月16日
    瀏覽(41)
  • Elasticsearch Index Templates(索引模板),如何實(shí)現(xiàn)分布式鎖

    Elasticsearch Index Templates(索引模板),如何實(shí)現(xiàn)分布式鎖

    “type”: “keyword” }, “created_at”: { “type”: “date”, “format”: “” } } } } } 代碼@1:觸發(fā)條件。 代碼@2:索引配置定義。 代碼@3:索引映射配置。 上述示例對應(yīng)的JAVA示例如下: public static final void createIndexTemp() { RestHighLevelClient client = EsClient.getClient(); try { PutIndexTemplateRequ

    2024年04月22日
    瀏覽(27)
  • ElasticSearch實(shí)戰(zhàn)之項目搜索高亮

    ElasticSearch實(shí)戰(zhàn)之項目搜索高亮

    為滿足 ElasticSearch 可在項目中實(shí)現(xiàn)搜索高亮,我們需要先做一些前情配置 導(dǎo)入 ElasticSearch 依賴 修改 propertise 配置 構(gòu)建一個搜索類對象,這里假設(shè)我們存在一個搜索對象為 Content ,其中我們要進(jìn)行查詢的字段是 title 同時,假設(shè)我們擁有 ListContent 數(shù)據(jù)集合,至此,我們做好了

    2024年04月22日
    瀏覽(27)
  • elasticsearch搜索關(guān)鍵字高亮顯示

    elasticsearch搜索關(guān)鍵字高亮顯示

    使用 elasticsearch 時,有一個很常見的需求是,能在頁面上將搜索出的結(jié)果中屬于的文字,進(jìn)行高亮顯示。 elasticsearch 對這個做了一定的支持,它能查詢結(jié)果的基礎(chǔ)上,額外返回需要高亮顯示的整個文本,至于具體你想怎么用它,需要根據(jù)業(yè)務(wù)自行實(shí)現(xiàn)。 使用 k

    2023年04月08日
    瀏覽(29)
  • ElasticSearch系列七:ElasticSearch搜索技術(shù)深入講解之高亮

    1.高亮顯示 ????????在搜索中,經(jīng)常需要對搜索做高亮顯示,高亮顯示也有其常用的參數(shù),在這個案例中做一些常用參數(shù)的介紹。假如現(xiàn)在搜索cars索引中remark字段中包含“大眾”的document。并對“XX”做高亮顯示,高亮效果使用html標(biāo)簽span,并設(shè)定字體為紅色

    2023年04月09日
    瀏覽(28)
  • Elasticsearch:RestHighLevelClient實(shí)現(xiàn)搜索、分頁、排序、高亮

    Elasticsearch:RestHighLevelClient實(shí)現(xiàn)搜索、分頁、排序、高亮

    1.引入依賴 2.自定義搜索DTO 3.封裝工具類、實(shí)現(xiàn) 分頁、高亮、排序 反射工具類 ReflectUtil 是我自定義的,原理是反射,可以引入hutool的工具包,同樣也可以實(shí)現(xiàn)該結(jié)果

    2024年02月11日
    瀏覽(25)
  • 【Elasticsearch】SpringBoot整合ES實(shí)現(xiàn)搜索功能 | 高亮顯示

    【Elasticsearch】SpringBoot整合ES實(shí)現(xiàn)搜索功能 | 高亮顯示

    先看代碼: controller: serviceImpl: 小結(jié) : 1、添加ES場景啟動器 2、yaml配置ES 3、準(zhǔn)備需要用到的變量 注:還有一個注入的RestHighLevelClient 結(jié)構(gòu)如下: 具體調(diào)用的方法以及設(shè)置頁碼等參看代碼。 加斷點(diǎn)查看對應(yīng)searchResponse數(shù)據(jù)結(jié)構(gòu): HighlightFields的數(shù)據(jù)結(jié)構(gòu): 對照kinaba結(jié)果: 3、根

    2024年02月11日
    瀏覽(26)
  • springboot——集成elasticsearch進(jìn)行搜索并高亮關(guān)鍵詞

    springboot——集成elasticsearch進(jìn)行搜索并高亮關(guān)鍵詞

    目錄 1.elasticsearch概述 3.springboot集成elasticsearch 4.實(shí)現(xiàn)搜索并高亮 (1)是什么: Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。 Lucene 可以被認(rèn)為是迄今為止最先進(jìn)、性能最好的、功能最全的搜索引擎庫。但Lucene 只是一個基于java下的庫,需要使用 Java 并要

    2023年04月20日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包