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