1. 客戶端版本種類
-
es提供的
- TransportClient
- 傳統(tǒng)的客戶端,基于TCP傳輸協(xié)議與Elasticsearch通信。
- 已經(jīng)被棄用,不推薦使用。
- 適用于Elasticsearch 5.x及以前的版本
- 因?yàn)镋lasticsearch 6.x及以上版本已不再支持TCP Transport協(xié)議,TransportClient無(wú)法連接Elasticsearch集群。
- RestHighLevelClient
- 是一個(gè)高級(jí)的REST客戶端,主要用于與Elasticsearch集群通信。
- 基于Java Low Level REST Client構(gòu)建,提供更高級(jí)的API,隱藏底層細(xì)節(jié)。
- 主要用于Kibana和Logstash等工具。
- RestHighLevelClient適用于Elasticsearch 6.2.0及以上版本。
- TransportClient
-
spring提供的
- ES存儲(chǔ)庫(kù)操作:簡(jiǎn)單的CRUD
- 特點(diǎn)
- 當(dāng)你需要進(jìn)行簡(jiǎn)單的CRUD操作(創(chuàng)建、讀取、更新、刪除文檔)時(shí),使用ES存儲(chǔ)庫(kù)操作是一個(gè)不錯(cuò)的選擇。
- 這是因?yàn)镾pring Data Elasticsearch會(huì)自動(dòng)生成存儲(chǔ)庫(kù)接口的實(shí)現(xiàn),從而使你的代碼更簡(jiǎn)潔、易于理解。
- 特點(diǎn)
- ElasticsearchTemplate
- 基于ElasticsearchRestTemplate封裝,提供更高級(jí)的API,如各種CRUD操作。
- 也需要依賴Spring Framework。
- ElasticsearchRestTemplate
- 是一個(gè)Spring的RestTemplate的擴(kuò)展,用于與Elasticsearch RESTful API交互。
- 基于Spring的RestTemplate,提供Elasticsearch的自動(dòng)化JSON序列化和反序列化。
- 需要依賴Spring Framework。
- ElasticsearchOperations:接口實(shí)現(xiàn)
- 使用選擇
- 如果需要更多spring集成相關(guān)的功能,則使用ElasticsearchTemplate。
- 如果需要直接訪問(wèn)Elasticsearch RESTful接口,則使用ElasticsearchRestTemplate。
- 性能和功能上,ElasticsearchTemplate略勝一籌。
- ES存儲(chǔ)庫(kù)操作:簡(jiǎn)單的CRUD
2. spring的相關(guān)操作客戶端
2.1 ES存儲(chǔ)庫(kù)操作:簡(jiǎn)單的CRUD
-
特點(diǎn)
- 當(dāng)你需要進(jìn)行簡(jiǎn)單的CRUD操作(創(chuàng)建、讀取、更新、刪除文檔)時(shí),使用ES存儲(chǔ)庫(kù)操作是一個(gè)不錯(cuò)的選擇。
- 這是因?yàn)镾pring Data Elasticsearch會(huì)自動(dòng)生成存儲(chǔ)庫(kù)接口的實(shí)現(xiàn),從而使你的代碼更簡(jiǎn)潔、易于理解。
-
核心
- 簡(jiǎn)單的crud操作
- 不支持復(fù)雜的查詢檢索
-
使用步驟
-
實(shí)體類
@Document(indexName = "encrypt_log", type = "encrypt_log") public class EncryptLogEntity { //對(duì)應(yīng)字段 private String srcIp; private String dstIp; //... // getters and setters }
-
創(chuàng)建
ElasticsearchRepository
接口public interface EncryptLogRepository extends ElasticsearchRepository<EncryptLogEntity, String> { }
-
對(duì)應(yīng)的服務(wù)中注入接口,并編寫(xiě)方法
@Autowired private MyDocumentRepository myDocumentRepository; // 創(chuàng)建文檔 myDocumentRepository.save(document); // 讀取文檔 MyDocument document = myDocumentRepository.findById(id).orElse(null); // 更新文檔 myDocumentRepository.save(updatedDocument); // 刪除文檔 myDocumentRepository.deleteById(id);
-
2.2 ElasticsearchTemplate:復(fù)雜的操作:增刪改查
-
特點(diǎn)
- 當(dāng)你需要執(zhí)行更復(fù)雜的查詢、聚合操作,或者需要使用一些特定的Elasticsearch功能時(shí),使用
ElasticsearchTemplate
可能是一個(gè)更好的選擇。 - 基于 Transport Client與ES交互。
- 當(dāng)你需要執(zhí)行更復(fù)雜的查詢、聚合操作,或者需要使用一些特定的Elasticsearch功能時(shí),使用
-
核心
- 更復(fù)雜的查詢、聚合操作 -> ElasticsearchTemplate
- 需要更簡(jiǎn)單、方便地集成ES時(shí),可以使用ElasticsearchTemplate。
-
使用
@Autowired private ElasticsearchTemplate elasticsearchTemplate; // 構(gòu)建查詢 QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", "example"); // 執(zhí)行查詢 SearchHits<MyDocument> searchHits = elasticsearchTemplate.search(new NativeSearchQueryBuilder() .withQuery(queryBuilder) .build(), MyDocument.class);
-
簡(jiǎn)單查詢例子
@Autowired private ElasticsearchTemplate esTemplate; List<Map<String, Object>> documents = ... esTemplate.bulkIndex(documents);
2.3 ElasticsearchRestTemplate:跨節(jié)點(diǎn)的搜索查詢
-
特點(diǎn)
- 適用于更復(fù)雜的查詢操作
-
情景
- 需要更高級(jí)ES功能時(shí),使用ElasticsearchRestTemplate。
- 需要更高級(jí)ES功能時(shí),使用ElasticsearchRestTemplate。
-
樣例
@Autowired private ElasticsearchRestTemplate esRestTemplate; List<Map<String, Object>> documents = ... esRestTemplate.bulkIndex(documents, Map.class); SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(matchQuery("name", "spring")) .build(); List<Map> results = esRestTemplate.search(searchQuery, Map.class) .getContent();
2.4 ElasticsearchTemplate和ElasticsearchRestTemplate主要的區(qū)別在于
-
底層實(shí)現(xiàn):
- ElasticsearchTemplate 底層使用 Elasticsearch Java API 實(shí)現(xiàn)。
- ElasticsearchRestTemplate 底層使用 Elasticsearch Rest API 實(shí)現(xiàn)。
-
使用范圍:
- ElasticsearchTemplate 只能在內(nèi)部使用,不支持跨節(jié)點(diǎn)操作。
- ElasticsearchRestTemplate 支持跨節(jié)點(diǎn)操作。
-
功能:
- ElasticsearchTemplate 功能更全面,支持多種操作,如索引、搜索、刪除等。
- ElasticsearchRestTemplate 主要用于搜索。
-
性能:
- ElasticsearchTemplate 性能更高,不需要經(jīng)過(guò) HTTP 請(qǐng)求。
- ElasticsearchRestTemplate 需要通過(guò) HTTP 請(qǐng)求,性能相對(duì)較低。
-
復(fù)雜度:
- ElasticsearchTemplate 復(fù)雜度較高,需要深入理解 Elasticsearch Java API。
- ElasticsearchRestTemplate 復(fù)雜度較低,只需要理解 Elasticsearch 的 REST API。
-
總的來(lái)說(shuō):
- 如果只在單個(gè)節(jié)點(diǎn)上操作 Elasticsearch,優(yōu)先選擇 ElasticsearchTemplate。
- 如果需要跨節(jié)點(diǎn)操作,或者為了簡(jiǎn)單起見(jiàn),可以選擇 ElasticsearchRestTemplate。
2.4 ElasticsearchOperations:接口
-
特點(diǎn)
- ElasticsearchOperations是一個(gè)接口,代表了基礎(chǔ)的Elasticsearch操作。
- ElasticsearchTemplate是ElasticsearchOperations的一個(gè)實(shí)現(xiàn)。
-
功能
- ElasticsearchOperations定義了基本的Elasticsearch操作,如插入、查詢、刪除等。
- ElasticsearchTemplate實(shí)現(xiàn)了ElasticsearchOperations接口,提供了更多功能,例如:
- 批量操作
- 分頁(yè)查詢
- 對(duì)復(fù)雜對(duì)象進(jìn)行轉(zhuǎn)換
- 映射管理
- 索引管理
-
使用
-
一般情況下,程序直接使用ElasticsearchTemplate。
-
在測(cè)試中,可以使用ElasticsearchOperations接口,達(dá)到分離依賴的目的。
-
3. 不同版本的依賴及對(duì)應(yīng)方法的選擇
-
進(jìn)入spring對(duì)應(yīng)的官網(wǎng)
-
隨便找一個(gè)api——找到歷史文檔及版本對(duì)應(yīng)版本對(duì)應(yīng)
-
然后找到對(duì)應(yīng)的官方操作客戶端方法文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-788398.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-788398.html
4. 總結(jié)
- es客戶端
- TransportClient :已過(guò)時(shí)
- RestHighLevelClient:es官方推薦的版本,但有時(shí)候在spring中被廢棄
- spring客戶端
- ES存儲(chǔ)庫(kù)
- 適用于簡(jiǎn)單的CRUD操作
- 可閱讀性強(qiáng),操作編寫(xiě)難度麻煩
- ElasticsearchTemplate
- 復(fù)雜的增刪改查操作
- 單節(jié)點(diǎn)中使用
- ElasticsearchRestTemplate
- 多節(jié)點(diǎn),和相對(duì)于ElasticsearchTemplate 更便捷的方法調(diào)用
- 更加多樣的查詢封裝方法
- ElasticsearchOperations
- 是一個(gè)接口,使用的較少
- ES存儲(chǔ)庫(kù)
到了這里,關(guān)于es相關(guān)的官方客戶端與spring客戶端對(duì)比與介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!