1 添加pom.xml依賴
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.3.2</version>
</dependency>
2 Es Client配置
package com.elasticsearch.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class EsClientConfig {
@Value("${esServer.hostname}")
private String hostName;
@Value("${esServer.port}")
private String esPort;
@Bean
public RestHighLevelClient client() {
int port = Integer.parseInt(esPort);
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost(hostName, port, "http"))
);
return restHighLevelClient;
}
}
3 對ES進行增刪改操作
package es;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.delete.DeleteRequest;
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.update.UpdateRequest;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.ScoreSortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
public class EsDemo {
private String hostName = "IP";
private int esPort = 9300;
private String index = "demo";
private String type = "demo";
RestHighLevelClient client;
{
// 指定ES集羣
// Settings setting = Settings.builder().put("cluster.name",
// "my-application").build();
// 創建訪問ES服務器的客戶端
client = new RestHighLevelClient(RestClient.builder(new HttpHost(hostName, esPort, "http")));
}
@Test
public void addTest() {
IndexRequest indexRequest = new IndexRequest(index, type);
News news = new News();
news.setTitle("中國產小型無人機的“對手”來了,俄微型攔截導彈便宜量又多");
news.setTag("軍事");
news.setPublishTime("2018-01-24T23:59:30Z");
String source = JSON.toJSONString(news);
indexRequest.source(source, XContentType.JSON);
try {
IndexResponse response = client.index(indexRequest);
System.out.println(response.getId());
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void queryTest(){
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.from(0);
sourceBuilder.size(10);
sourceBuilder.fetchSource(new String[]{"title","tag"}, new String[]{});
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", "費德勒");
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("tag", "軍事新聞");
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("publishTime");
rangeQueryBuilder.gte("2018-01-23T08:00:00Z");
rangeQueryBuilder.lte("2018-01-26T20:00:00Z");
BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery();
// boolBuilder.must(matchQueryBuilder);
boolBuilder.must(termQueryBuilder);
boolBuilder.must(rangeQueryBuilder);
sourceBuilder.query(boolBuilder);
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.types(type);
searchRequest.source(sourceBuilder);
try {
SearchResponse response = client.search(searchRequest);
System.out.println(response);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void queryTest2(){
SearchRequest request = new SearchRequest(index);
request.types(type);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("tag", "軍事")
.fuzziness(Fuzziness.AUTO)
.prefixLength(3)//Set the prefix length option on the match query
.maxExpansions(5);//Set the max expansion options to control the fuzzy process of the query
sourceBuilder.query(matchQueryBuilder);
sourceBuilder.from(0);
sourceBuilder.size(10);
sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));
request.source(sourceBuilder);
try {
SearchResponse response = client.search(request);
RestStatus status = response.status();
SearchHits hits = response.getHits();
long rst = hits.getTotalHits();
List array = new ArrayList();
for (SearchHit hit:hits) {
Map tempSource = hit.getSourceAsMap();
tempSource.remove("@timestamp");
tempSource.remove("@version");
array.add(tempSource);
}
JSONObject responseData = new JSONObject();
responseData.put("companies",array);
} catch (IOException e) {
}
}
@Test
public void updateTest(){
String id ="-RXNkWsBmdTwxR2cLTLQ";
UpdateRequest updateRequest = new UpdateRequest(index, type, id);
Map<String, String> map = new HashMap<>();
map.put("tag", "軍事新聞");
updateRequest.doc(map);
try {
client.update(updateRequest);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void delete() {
try {
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.timeout(new TimeValue(2, TimeUnit.SECONDS));
String deleteText = "test1";
TermQueryBuilder termQueryBuilder1 = QueryBuilders.termQuery("content.keyword", deleteText);
sourceBuilder.query(termQueryBuilder1);
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.types(type);
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest);
SearchHits hits = response.getHits();
List<String> docIds = new ArrayList<>(hits.getHits().length);
for (SearchHit hit : hits) {
docIds.add(hit.getId());
}
BulkRequest bulkRequest = new BulkRequest();
for (String id : docIds) {
DeleteRequest deleteRequest = new DeleteRequest(index, type, id);
bulkRequest.add(deleteRequest);
}
client.bulk(bulkRequest);
} catch (IOException e) {
e.printStackTrace();
}
}
}