二.springBoot项目集成ElasticSearch及使用
- 1.依赖引入
- 2.ElasticSearch常见用法
1.依赖引入
<!--elasticsearch搜索引擎-->
<!--高版本7.0后TransportClient已被淘汰,用rest-high-level-client代替-->
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.6.2</version>
</dependency>
<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.6.2</version><scope>compile</scope>
</dependency>
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>7.6.2</version><scope>compile</scope>
</dependency>
2.ElasticSearch常见用法
package com.lmy.elasticSearchTest;import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.lmy.elasticSearchTest.pojo.User;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class ElasticSearchApiTest {private RestHighLevelClient restHighLevelClient;@Value("${es.hosts}")private String hosts = "127.0.0.1";@Value("${es.port}")private int port = 9200;@Value("${es.userName}")private String userName = "";@Value("${es.password}")private String password = "";private static String schema = "http";private static int connectTimeOut = 1000;private static int socketTimeOut = 30000;private static int connectionRequestTimeOut = 500;@Beforepublic void init() throws IOException {final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));RestClientBuilder builder = RestClient.builder(this.getHostList().toArray(new HttpHost[0])).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {@Overridepublic HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);}});builder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {@Overridepublic RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {requestConfigBuilder.setConnectTimeout(connectTimeOut);requestConfigBuilder.setSocketTimeout(socketTimeOut);requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);return requestConfigBuilder;}});restHighLevelClient = new RestHighLevelClient(builder);}public ArrayList<HttpHost> getHostList() {ArrayList<HttpHost> hostList = new ArrayList<>();String[] hostStrs = hosts.split(",");for (String host : hostStrs) {hostList.add(new HttpHost(host, port, schema));}return hostList;}@Testpublic void testCreateIndex() throws IOException {CreateIndexRequest request = new CreateIndexRequest("api_test");CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);System.out.println(response);restHighLevelClient.close();}@Testpublic void testIndexIsExists() throws IOException {GetIndexRequest request = new GetIndexRequest("api_test");boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);System.out.println(exists);restHighLevelClient.close();}@Testpublic void testDeleteIndex() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("blog");AcknowledgedResponse response = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);System.out.println(response.isAcknowledged());restHighLevelClient.close();}@Testpublic void testAddDocument() throws IOException {User user = new User("wangmazi", 99);IndexRequest request = new IndexRequest("api_test");request.id("3");request.timeout(TimeValue.timeValueMillis(1000));request.source(JSON.toJSONString(user), XContentType.JSON);IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);System.out.println(response);restHighLevelClient.close();}@Testpublic void testGetDocument() throws IOException {GetRequest request = new GetRequest("api_test","_all", "1");GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);System.out.println(response.getSourceAsString());System.out.println(request);restHighLevelClient.close();}@Testpublic void testDocumentIsExists() throws IOException {GetRequest request = new GetRequest("api_test","_all", "1");request.fetchSourceContext(new FetchSourceContext(false));request.storedFields("_none_");boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT);System.out.println(exists);restHighLevelClient.close();}@Testpublic void testUpdateDocument() throws IOException {UpdateRequest request = new UpdateRequest("api_test","_all", "1");User user = new User("lmy", 25);request.doc(JSON.toJSONString(user), XContentType.JSON);UpdateResponse update = restHighLevelClient.update(request, RequestOptions.DEFAULT);System.out.println(update.status());restHighLevelClient.close();}@Testpublic void testDeleteDocument() throws IOException {DeleteRequest request = new DeleteRequest("api_test","_all", "3");request.timeout("1s");DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);System.out.println(response.status());restHighLevelClient.close();}@Testpublic void testSearch() throws IOException {List<User> userList = new ArrayList<>();SearchRequest request = new SearchRequest("api_test");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();TermQueryBuilder termQuery = QueryBuilders.termQuery("name", "lmy");MatchAllQueryBuilder matchAllQuery = QueryBuilders.matchAllQuery();MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "lmy");RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age");rangeQueryBuilder.gte("17");rangeQueryBuilder.lte("20");BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();boolQueryBuilder.must(QueryBuilders.matchQuery("name", "lmy"));boolQueryBuilder.must(QueryBuilders.rangeQuery("age").gte("17").lte("20"));searchSourceBuilder.highlighter(new HighlightBuilder());searchSourceBuilder.from(0);searchSourceBuilder.size(3);searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));searchSourceBuilder.query(boolQueryBuilder);request.source(searchSourceBuilder);SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println(JSON.toJSONString(hits));System.out.println("========================");for (SearchHit h:hits.getHits()) {System.out.println(h.getSourceAsMap());User user = BeanUtil.mapToBean(h.getSourceAsMap(), User.class,true);userList.add(user);}System.out.println(userList);restHighLevelClient.close();}@Testpublic void testBulk() throws IOException {BulkRequest request = new BulkRequest();request.timeout("10s");ArrayList<User> list = new ArrayList<>();list.add(new User("lmy-1",18));list.add(new User("lmy-2",19));list.add(new User("lmy-3",20));list.add(new User("lmy-4",21));for (User u :list) {request.add(new IndexRequest("api_test").source(JSON.toJSONString(u),XContentType.JSON));}BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);System.out.println(bulk.status());restHighLevelClient.close();}
}