任何網(wǎng)站都可以做谷歌推廣的嗎專業(yè)的網(wǎng)頁(yè)制作公司
目錄
- 版本介紹
- 背景介紹
- 優(yōu)勢(shì)說明
- 集成過程
- 1.引入依賴
- 2.添加配置文件
- 3.初始化
- 示例說明
- 代碼
- 結(jié)果
- 總結(jié)提升
版本介紹
??Spring boot的版本是: 2.3.12
??ElasticSearch的版本是:7.6.2
背景介紹
??在我們的項(xiàng)目中經(jīng)常會(huì)遇到對(duì)于字符串的一些操作,例如對(duì)于字符串的分詞,通過一個(gè)詞去查找對(duì)應(yīng)的原文(全文搜索)。那可能有人就會(huì)問了,使用mysql的模糊查詢也可以根據(jù)一個(gè)詞去查找對(duì)應(yīng)的原文呀?是的沒有問題,Elasticsearch和 MySQL 是兩種不同類型的數(shù)據(jù)庫(kù),各自有不同的特點(diǎn)和適用場(chǎng)景。MySQL 適用于關(guān)系型數(shù)據(jù)存儲(chǔ)和復(fù)雜的關(guān)系查詢,適合事務(wù)性操作和數(shù)據(jù)一致性要求較高的場(chǎng)景。Elasticsearch 適用于大規(guī)模數(shù)據(jù)的全文搜索和分析,適合實(shí)時(shí)性要求較高的場(chǎng)景。下面我們來說一說項(xiàng)目中是如何使用和集成Elasticsearch服務(wù)的。
優(yōu)勢(shì)說明
Elasticsearch(簡(jiǎn)稱 ES)是一種開源的分布式搜索和分析引擎,具有以下幾個(gè)主要的好處:
- 「 高性能和可擴(kuò)展性 」:Elasticsearch 是分布式的,可以通過添加節(jié)點(diǎn)來擴(kuò)展數(shù)據(jù)存儲(chǔ)和查詢能力。它使用倒排索引來加速搜索和聚合操作,具有快速的響應(yīng)時(shí)間和高吞吐量。
- 「 全文搜索和復(fù)雜查詢 」:Elasticsearch 支持全文搜索和復(fù)雜的查詢功能,包括模糊搜索、多字段搜索、聚合查詢、地理位置查詢等。它使用自己的查詢語言(DSL)來構(gòu)建查詢,并提供了強(qiáng)大的查詢語法和過濾器。
- 「實(shí)時(shí)性和實(shí)時(shí)分析 」:Elasticsearch 支持實(shí)時(shí)索引和搜索,可以在數(shù)據(jù)寫入后立即進(jìn)行搜索和分析。它適用于實(shí)時(shí)監(jiān)控、日志分析、實(shí)時(shí)搜索和實(shí)時(shí)報(bào)表等場(chǎng)景。
- 「多種數(shù)據(jù)類型支持」:Elasticsearch 支持多種數(shù)據(jù)類型的存儲(chǔ)和查詢,包括文本、數(shù)字、日期、地理位置等。它可以根據(jù)不同的數(shù)據(jù)類型進(jìn)行索引和分析,并提供相應(yīng)的查詢和聚合功能。
- 「分布式架構(gòu)和高可用性」:Elasticsearch 使用分布式架構(gòu),可以在多個(gè)節(jié)點(diǎn)上存儲(chǔ)和處理數(shù)據(jù),具有較好的水平擴(kuò)展性和高可用性。它支持?jǐn)?shù)據(jù)的自動(dòng)分片和復(fù)制,可以在節(jié)點(diǎn)故障時(shí)自動(dòng)恢復(fù)數(shù)據(jù)。
集成過程
1.引入依賴
<!--Elasticsearch服務(wù)--><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.6.2</version></dependency>
??根據(jù)安裝的Elasticsearch的版本來填寫version標(biāo)簽中的內(nèi)容
2.添加配置文件
elasticsearch:host: localhost 填寫es服務(wù)的ip地址port: 9200 es服務(wù)的端口號(hào)client:type: http 請(qǐng)求es的類型:通過http或者內(nèi)部的javaAPI通信username: xxxx 登錄es的賬號(hào)password: xxxx 登錄es的密碼
??如果es服務(wù)沒有設(shè)置賬號(hào)和密碼可以不進(jìn)行賬號(hào)密碼配置的填寫(為了安全建議添加上賬號(hào)面密碼)
3.初始化
一個(gè)RestHighLevelClient實(shí)例需要一個(gè)REST底層客戶端構(gòu)建器
@Value("${elasticsearch.host}")private String host;@Value("${elasticsearch.port}")private int port;@Value("${elasticsearch.client.type}")private String clientType;@Autowiredprivate RestHighLevelClient client;@Beanpublic RestHighLevelClient restHighLevelClient(){RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost(host, port, clientType)));return client;}
示例說明
代碼
@Autowiredprivate RestHighLevelClient client;public void test() throws IOException {AnalyzeRequest analyzeRequest = AnalyzeRequest.withGlobalAnalyzer("ik_smart", "武梓龍來寫CSDN博客來了");AnalyzeResponse analyze = client.indices().analyze(analyzeRequest, RequestOptions.DEFAULT);for (AnalyzeResponse.AnalyzeToken token : analyze.getTokens()) {System.out.println(token.getTerm());}}
??示例是將一段話進(jìn)行分詞操作,其中withGlobalAnalyzer方法的第一個(gè)參數(shù)是指定分詞器ik_smart分詞器(當(dāng)然也可以使用其他分詞器,根據(jù)業(yè)務(wù)的需求進(jìn)行調(diào)整) 是es服務(wù)中安裝了IK的插件實(shí)現(xiàn)的,如果不安裝IK分詞器的插件ik_smart分詞器是無法使用的。第二個(gè)參數(shù)就是我們分詞的內(nèi)容了。
結(jié)果
總結(jié)提升
??項(xiàng)目集成并使用ES服務(wù)可以提供強(qiáng)大的搜索和分析功能,幫助項(xiàng)目實(shí)現(xiàn)實(shí)時(shí)搜索、復(fù)雜查詢和聚合分析等需求。ES具有分布式架構(gòu)和高可用性,可以處理大規(guī)模數(shù)據(jù)并保證系統(tǒng)的可用性。同時(shí),ES還擁有豐富的生態(tài)系統(tǒng)和工具支持,可以更好地集成和使用。因此,在項(xiàng)目中使用ES可以提升搜索和分析的效率和能力,滿足項(xiàng)目的需求。