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

spring boot 3使用 elasticsearch 提供搜索建議

這篇具有很好參考價值的文章主要介紹了spring boot 3使用 elasticsearch 提供搜索建議。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

業(yè)務(wù)場景

用戶輸入內(nèi)容,快速返回建議,示例效果如下
spring boot 3使用 elasticsearch 提供搜索建議,spring boot,搜索引擎,筆記,spring boot,elasticsearch,搜索引擎,原力計劃

技術(shù)選型

  • spring boot 3
  • elasticsearch server 7.17.4
  • spring data elasticsearch 5.0.1
  • elasticsearch-java-api 8.5.3

pom.xml

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  </dependency>
  <dependency>
     <groupId>org.elasticsearch</groupId>
     <artifactId>elasticsearch</artifactId>
     <version>8.5.3</version>
 </dependency>
        

yml

spring:
  elasticsearch:
    uris: http://127.0.0.1:9200
  data:
    elasticsearch:
      repositories:
        enabled: true

實(shí)體類

為了啟動時候自己創(chuàng)建相關(guān)的index,以及存儲搜索內(nèi)容


import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.CompletionField;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.elasticsearch.core.suggest.Completion;

/**
 * 業(yè)務(wù)搜索建議
 * @author chunyang.leng
 * @date 2023-08-21 14:24
 */
@Document(indexName = "biz_suggest")
public class BizSuggestDocument {

    @Id
    private Long id;

    /**
     * 標(biāo)題,可以用于糾錯,不參與搜索建議
     */
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String name;

    /**
     * 自動補(bǔ)全標(biāo)題,搜索建議使用的對象
     */
    @CompletionField(analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private Completion completionName;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Completion getCompletionName() {
        return completionName;
    }

    public void setCompletionName(Completion completionName) {
        this.completionName = completionName;
    }
}

搜索結(jié)果對象


/**
 * 搜索建議返回對象
 * @author chunyang.leng
 * @date 2023-08-21 19:02
 */
public class SuggestVO {
    /**
     * 數(shù)據(jù)id
     */
    private Long id;

    /**
     * 內(nèi)容
     */
    private String text;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

搜索業(yè)務(wù)層

  • 數(shù)據(jù)導(dǎo)入時候,因?yàn)橛袛?shù)據(jù)格式要求,必須使用實(shí)體類進(jìn)行寫入

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.elasticsearch.core.search.CompletionSuggester;
import co.elastic.clients.elasticsearch.core.search.Suggester;
import co.elastic.clients.elasticsearch.core.search.Suggestion;
import co.elastic.clients.elasticsearch.core.search.TermSuggester;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author chunyang.leng
 * @date 2023-08-18 18:29
 */
@Component
public class SuggestionServiceImpl implements SuggestionService {
    /**
     * 搜索建議 key
     */
    private static final String SUGGEST_TAG = "suggest_query";

    /**
     * 糾錯key
     */
    private static final String TERM_TAG = "suggest_team";
    @Autowired
    private ElasticsearchClient elasticsearchClient;

    /**
     * 根據(jù) 關(guān)鍵詞,返回搜索建議
     *
     * @param match 搜索關(guān)鍵詞
     * @return 搜索建議,10條
     */
    @Override
    public List<SuggestVO> suggest(String match) throws IOException {
        SearchRequest completionSuggestSearchRequest = new SearchRequest
            .Builder()
            .suggest(
                new Suggester
                    .Builder()
                    .suggesters(SUGGEST_TAG, builder -> builder.prefix(match)
                        .completion(new CompletionSuggester
                            .Builder()
                            .field("completionName")
                            .size(10)
                            .build()
                        )
                    )
                    .build())
            .build();

        SearchResponse<BizSuggestDocument> completionSuggestSearch = elasticsearchClient.search(completionSuggestSearchRequest, BizSuggestDocument.class);

        Map<String, List<Suggestion<BizSuggestDocument>>> suggest = completionSuggestSearch.suggest();

        List<Suggestion<BizSuggestDocument>> suggestions = suggest.get(SUGGEST_TAG);

        return suggestions
            .parallelStream()
            .flatMap(x -> x.completion()
                .options()
                .stream()
                .map(o -> {
                      // 原始數(shù)據(jù)對象,如果有需要,可以對其進(jìn)行操作
                    BizSuggestDocument source = o.source();
                    
                   
                    String text = o.text();
                    String idValue = o.id();
                    Long id = Long.valueOf(idValue);
                    SuggestVO vo = new SuggestVO();
                    vo.setId(id);
                    vo.setText(text);
                    return vo;
                }))
            .collect(Collectors.toList());
    }
}

導(dǎo)入數(shù)據(jù)


import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.suggest.Completion;

/**
 * @author chunyang.leng
 * @date 2023-08-21 18:09
 */
@SpringBootTest
public class EsTest {

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;

    @Test
    public void test() {
        BizSuggestDocument document = new BizSuggestDocument();
        document.setId(1L);
        document.setName("飛翔的世界");

        String[] s = "你的世界1.0,我的世界2.0".split(",");
        Completion completion = new Completion(s);
        completion.setWeight(10);
        document.setCompletionName(completion);
        elasticsearchTemplate.save(document);


        BizSuggestDocument document2 = new BizSuggestDocument();
        document2.setId(2L);
        document2.setName("路人甲乙丙");

        String[] s2 = "你的滑板鞋1.0,我的滑板鞋2.0".split(",");
        Completion completion1 = new Completion(s2);
        completion1.setWeight(5);
        document2.setCompletionName(completion1);
        elasticsearchTemplate.save(document2);
    }
}

POSTMAN 測試結(jié)果如下

spring boot 3使用 elasticsearch 提供搜索建議,spring boot,搜索引擎,筆記,spring boot,elasticsearch,搜索引擎,原力計劃
spring boot 3使用 elasticsearch 提供搜索建議,spring boot,搜索引擎,筆記,spring boot,elasticsearch,搜索引擎,原力計劃文章來源地址http://www.zghlxwxcb.cn/news/detail-662620.html

到了這里,關(guān)于spring boot 3使用 elasticsearch 提供搜索建議的文章就介紹完了。如果您還想了解更多內(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)文章

  • Spring Boot 整合 分布式搜索引擎 Elastic Search 實(shí)現(xiàn) 數(shù)據(jù)聚合

    Spring Boot 整合 分布式搜索引擎 Elastic Search 實(shí)現(xiàn) 數(shù)據(jù)聚合

    本文參考黑馬 分布式Elastic search Elasticsearch是一款非常強(qiáng)大的開源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容 本篇文章將講解 Elastic Search 如何實(shí)現(xiàn)數(shù)據(jù)聚合,以及 在項(xiàng)目實(shí)戰(zhàn)中如何通過數(shù)據(jù)聚合實(shí)現(xiàn)業(yè)務(wù)需求并完成功能。 以下為官方

    2024年02月11日
    瀏覽(33)
  • Spring Cloud學(xué)習(xí)(九)【Elasticsearch 分布式搜索引擎01】

    Spring Cloud學(xué)習(xí)(九)【Elasticsearch 分布式搜索引擎01】

    Elasticsearch 是一款非常強(qiáng)大的開源搜索引擎,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容。 elasticsearch 結(jié)合 kibana、Logstash、Beats,也就是 elastic stack(ELK) 。被廣泛應(yīng)用在日志數(shù)據(jù)分析、實(shí)時監(jiān)控等領(lǐng)域。 elasticsearch 是 elastic stack 的核心,負(fù)責(zé) 存儲、搜索、分析數(shù)據(jù) 。

    2024年02月05日
    瀏覽(92)
  • Spring Cloud學(xué)習(xí)(十一)【深入Elasticsearch 分布式搜索引擎03】

    Spring Cloud學(xué)習(xí)(十一)【深入Elasticsearch 分布式搜索引擎03】

    聚合(aggregations)可以實(shí)現(xiàn)對文檔數(shù)據(jù)的統(tǒng)計、分析、運(yùn)算。聚合常見的有三類: 桶(Bucket)聚合:用來對文檔做分組 TermAggregation:按照文檔字段值分組 Date Histogram:按照日期階梯分組,例如一周為一組,或者一月為一組 度量(Metric)聚合:用以計算一些值,比如:最大值

    2024年01月23日
    瀏覽(63)
  • Spring Boot進(jìn)階(19):Spring Boot 整合ElasticSearch | 超級詳細(xì),建議收藏

    Spring Boot進(jìn)階(19):Spring Boot 整合ElasticSearch | 超級詳細(xì),建議收藏

    ????????ElasticSearch是一款基于Lucene的開源搜索引擎,具有高效、可擴(kuò)展、分布式的特點(diǎn),可用于全文搜索、日志分析、數(shù)據(jù)挖掘等場景。Spring Boot作為目前最流行的微服務(wù)框架之一,也提供了對ElasticSearch的支持。本篇文章將介紹如何在Spring Boot項(xiàng)目中整合ElasticSearch,并展

    2024年02月06日
    瀏覽(31)
  • Spring Boot 整合 分布式搜索引擎 Elastic Search 實(shí)現(xiàn) 我附近的、酒店競排

    Spring Boot 整合 分布式搜索引擎 Elastic Search 實(shí)現(xiàn) 我附近的、酒店競排

    本文參考黑馬 分布式Elastic search Elasticsearch是一款非常強(qiáng)大的開源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容 在酒店列表頁的右側(cè),有一個小地圖,點(diǎn)擊地圖的定位按鈕,地圖會找到你所在的位置: 點(diǎn)擊定位后,會發(fā)送給服務(wù)端以下請求

    2024年02月06日
    瀏覽(26)
  • 全文搜索引擎 Elasticsearch 入門使用

    目錄 1、安裝 2、基本概念 2.1 Node 與 Cluster 2.2 Index 2.3 Document? 2.4 Type 3、新建和刪除 Index 4、中文分詞設(shè)置? 5、數(shù)據(jù)操作? 5.1 新增記錄? 5.2 查看記錄? ?5.3 刪除記錄 5.4 更新記錄? 6、數(shù)據(jù)查詢 6.1 返回所有記錄 6.2 全文搜索 ?6.3 邏輯運(yùn)算 7、參考鏈接 本文從零開始,講解如何

    2024年02月09日
    瀏覽(20)
  • SpringBoot 使用 Elasticsearch 搜索引擎

    作者:禪與計算機(jī)程序設(shè)計藝術(shù) Spring Boot 是由 Pivotal 團(tuán)隊(duì)提供的一套用于開發(fā)基于 Spring 框架的應(yīng)用的工具包。其主要目標(biāo)是通過提供簡單易用的starter包來簡化開發(fā)流程。Spring Boot 極大的地方在于其依賴自動配置,可以很好的滿足開發(fā)人員的開發(fā)需求。Spring Boot 提供了數(shù)據(jù)訪

    2024年02月09日
    瀏覽(21)
  • 提升搜索引擎效率:使用 Elasticsearch 別名

    提升搜索引擎效率:使用 Elasticsearch 別名

    ? ?Elasticsearch 因其強(qiáng)大的搜索能力而備受推崇,使其成為構(gòu)建高性能搜索引擎的熱門選擇。其中一個關(guān)鍵特性是使用別名,Elasticsearch 的別名為優(yōu)化搜索操作、提升查詢性能以及啟用動態(tài)索引管理提供了強(qiáng)大的機(jī)制。 在本文中,我們將探討如何使用別名在 Elasticsearch 中創(chuàng)建

    2024年02月11日
    瀏覽(28)
  • Elasticsearch:使用 Elasticsearch 和 BERT 構(gòu)建搜索引擎 - TensorFlow

    Elasticsearch:使用 Elasticsearch 和 BERT 構(gòu)建搜索引擎 - TensorFlow

    在本文中,我們使用預(yù)訓(xùn)練的 BERT 模型和 Elasticsearch 來構(gòu)建搜索引擎。 Elasticsearch 最近發(fā)布了帶有向量場的文本相似性(text similarity search with vector field)搜索。 另一方面,你可以使用 BERT 將文本轉(zhuǎn)換為固定長度的向量。 因此,一旦我們將文檔通過 BERT 轉(zhuǎn)換為向量并存儲到

    2024年02月07日
    瀏覽(21)
  • 使用Elasticsearch構(gòu)建強(qiáng)大的搜索和分析引擎

    Elasticsearch是一個基于Lucene的分布式搜索和分析引擎,被廣泛用于處理大規(guī)模的文本數(shù)據(jù)。無論是構(gòu)建全文搜索引擎、進(jìn)行日志分析還是實(shí)現(xiàn)實(shí)時數(shù)據(jù)可視化,Elasticsearch都是一個強(qiáng)大而靈活的工具。本文將帶您逐步了解如何使用Elasticsearch,并構(gòu)建您自己的搜索和分析應(yīng)用。

    2024年02月04日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包