Elasticsearch rest-high-level-client 基本操作

Elasticsearch rest-high-level-client 基本操作

本篇主要講解一下 rest-high-level-client 去操作 Elasticsearch , 雖然這個客戶端在后續版本中會慢慢淘汰,但是目前大部分公司中使用Elasticsearch 版本都是6.x所以這個客戶端還是有一定的了解

Elasticsearch rest-high-level-client 基本操作

文章插圖
前置準備
  • 準備一個SpringBoot環境2.2.11 版本
  • 準備一個Elasticsearch 環境 我這里是8.x版本
  • 引入依賴 elasticsearch-rest-high-level-client7.4.2
1.配置依賴注意: 我使用的是 springboot 2.2.11 版本 , 它內部的 elasticsearch 和 elasticsearch-rest-client 都是 6.8.13 需要注意
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 引入 elasticsearch 7.4.2--><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.4.2</version><exclusions><exclusion><artifactId>log4j-api</artifactId><groupId>org.apache.logging.log4j</groupId></exclusion></exclusions></dependency><!-- 排除 elasticsearch-rest-client , 也可不排除 為了把maven沖突解決--><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.4.2</version><exclusions><exclusion><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId></exclusion><exclusion><artifactId>elasticsearch</artifactId><groupId>org.elasticsearch</groupId></exclusion></exclusions></dependency><!-- 不引入會導致可能 使用 springboot的 elasticsearch-rest-client 6.8.13 --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>7.4.2</version></dependency><!-- elasticsearch 依賴 2.x 的 log4j --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version><!--排除掉 log4j-api 因為springbootstarter 中引入了loging模塊 --><exclusions><exclusion><artifactId>log4j-api</artifactId><groupId>org.apache.logging.log4j</groupId></exclusion></exclusions></dependency><!-- junit 單元測試 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>2.構建 RestHighLevelClienthighlevelclient 是 高級客戶端 需要通過它去操作 Elasticsearch ,它底層也是要依賴 rest-client 低級客戶端
@Slf4jpublic class TestEsClient {private RestHighLevelClient client = null;private ObjectMapper objectMapper = new ObjectMapper();//構建 RestHighLevelClient@Beforepublic void prepare() {// 創建Client連接對象String[] ips = {"172.16.225.111:9200"};HttpHost[] httpHosts = new HttpHost[ips.length];for (int i = 0; i < ips.length; i++) {httpHosts[i] = HttpHost.create(ips[i]);}RestClientBuilder builder = RestClient.builder(httpHosts);client = new RestHighLevelClient(builder);}}3.創建索引 client.indices().create創建索引 需要使用 CreateIndexRequest 對象 , 操作 索引基本上是 client.indices().xxx
構建 CreateIndexRequest 對象
@Testpublic void test1() {CreateIndexRequest request = new CreateIndexRequest("blog1");try {CreateIndexResponse createIndexResponse =client.indices().create(request, RequestOptions.DEFAULT);boolean acknowledged = createIndexResponse.isAcknowledged();log.info("[create index blog :{}]", acknowledged);} catch (IOException e) {e.printStackTrace();}}4.刪除索引 client.indices().delete構建 DeleteIndexRequest 對象
@Testpublic void testDeleteIndex(){DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("blog1");try {AcknowledgedResponse response = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);log.info("[delete index response: {}", response.isAcknowledged());} catch (IOException e) {e.printStackTrace();}}4.查詢索引 client.indices().get構建 GetIndexRequest 對象
@Testpublic void testSearchIndex() {GetIndexRequest request = new GetIndexRequest("blog1");try {GetIndexResponse getIndexResponse =client.indices().get(request, RequestOptions.DEFAULT);Map<String, List<AliasMetaData>> aliases = getIndexResponse.getAliases();Map<String, MappingMetaData> mappings = getIndexResponse.getMappings();Map<String, Settings> settings = getIndexResponse.getSettings();log.info("[aliases: {}]", aliases);log.info("[mappings: {}]", mappings);log.info("[settings: {}", settings);} catch (IOException e) {e.printStackTrace();}}

推薦閱讀