1.maven导入pom.xml依赖
org.elasticsearch
elasticsearch
7.8.0
org.elasticsearch.client
elasticsearch-rest-high-level-client
7.8.0
2.es客户端连接配置类
@Configuration
public class EsRestHighLevelClient {
@Bean
public RestHighLevelClient restHighLevelClient() {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
return client;
}
}
3.基本操作
import com.alibaba.fastjson2.JSONObject;
import com.lxy.bms.domain.User;
import com.lxy.bms.es.EsRestHighLevelClient;
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.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.cluster.metadata.AliasMetadata;
import org.elasticsearch.common.unit.Fuzziness;
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.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.naming.directory.SearchResult;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@SpringBootTest
class BmsApplicationTests {
@Autowired
private RestHighLevelClient restHighLevelClient;
/**
* 创建索引
*
* @throws IOException
*/
@Test
void insertIndex() throws IOException {
CreateIndexRequest request = new CreateIndexRequest("user");
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
//响应状态
boolean acknowledged = createIndexResponse.isAcknowledged();
System.out.println("创建索引操作:" + acknowledged);
restHighLevelClient.close();
}
/**
* 查询索引
*
* @throws IOException
*/
@Test
void getIndex() throws IOException {
GetIndexRequest request = new GetIndexRequest("user_index");
GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);
System.out.println(getIndexResponse.getAliases());
System.out.println(getIndexResponse.getMappings());
System.out.println(getIndexResponse.getSettings());
restHighLevelClient.close();
}
/**
* 删除索引
*
* @throws IOException
*/
@Test
void deleteIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("user_index");
AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
boolean acknowledged = delete.isAcknowledged();
System.out.println("删除索引操作:" + acknowledged);
restHighLevelClient.close();
}
/**
* 创建文档
*
* @throws IOException
*/
@Test
void insertIndexDoc() throws IOException {
IndexRequest request = new IndexRequest();
request.index("user").id("1001");
User user = new User();
user.setUsername("张三");
user.setAge(30);
user.setSex("男");
String userJson = JSONObject.toJSONString(user);
request.source(userJson, XContentType.JSON);
IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
System.out.println(response.getResult());
restHighLevelClient.close();
}
/**
* 修改文档
*
* @throws IOException
*/
@Test
void updateIndexDoc() throws IOException {
UpdateRequest request = new UpdateRequest();
request.index("user").id("1001");
User user = new User();
user.setUsername("李四");
user.setAge(50);
user.setSex("女");
String userJson = JSONObject.toJSONString(user);
request.doc(userJson, XContentType.JSON);
UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
System.out.println(response.getResult());
restHighLevelClient.close();
}
/**
* 查看文档
*
* @throws IOException
*/
@Test
void getIndexDoc() throws IOException {
GetRequest request = new GetRequest();
request.index("user").id("1001");
GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
System.out.println(response.getSourceAsString());
restHighLevelClient.close();
}
/**
* 删除文档
*
* @throws IOException
*/
@Test
void deleteIndexDoc() throws IOException {
DeleteRequest request = new DeleteRequest();
request.index("user").id("1001");
DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
restHighLevelClient.close();
}
/**
* 批量添加文档
* @throws IOException
*/
@Test
void batchInsertIndexDoc() throws IOException {
BulkRequest request=new BulkRequest();
//设置多长时间导入一次
request.timeout ("10s");
List list=new ArrayList<>();
list.add(new User("zhangsan",20,"男"));
list.add(new User("lisi",30,"男"));
list.add(new User("wangwu",40,"男"));
for (int i = 0; i < list.size(); i++) {
request.add(new IndexRequest().index("user").id((10010+i)+"").source(JSONObject.toJSONString(list.get(i)),XContentType.JSON));
}
BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
System.out.println(response.getTook());
System.out.println(response.getItems());
restHighLevelClient.close();
}
/**
* 批量删除文档
* @throws IOException
*/
@Test
void batchDeleteIndexDoc() throws IOException {
BulkRequest request=new BulkRequest();
//设置多长时间导入一次
request.timeout ("10s");
List list=new ArrayList<>();
list.add(new User("zhangsan",20,"男"));
list.add(new User("lisi",30,"男"));
list.add(new User("wangwu",40,"男"));
for (int i = 0; i < list.size(); i++) {
request.add(new DeleteRequest().index("user").id((10010+i)+""));
}
BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
//took 值告诉我们执行整个搜索请求耗费了多少毫秒。
System.out.println(response.getTook());
System.out.println(response.getItems());
restHighLevelClient.close();
}
/**
* 查询索引下的全部文档
* @throws IOException
*/
@Test
void allQuery() throws IOException {
SearchRequest request=new SearchRequest();
request.indices("user");
request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
}
/**
* 条件查询
* @throws IOException
*/
@Test
void termQuery() throws IOException {
SearchRequest request=new SearchRequest();
request.indices("user");
request.source(new SearchSourceBuilder().query(QueryBuilders.termsQuery("age","40")));
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
}
/**
* 分页查询
* @throws IOException
*/
@Test
void pagingQuery() throws IOException {
SearchRequest request=new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
//从第【(当前页码-1)*每页显示数据条数】开始查询
builder.from(0);
//每页查询多少条数据
builder.size(3);
request.source(builder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
}
/**
* 条件查询
* @throws IOException
*/
@Test
void fieldQuery() throws IOException {
SearchRequest request=new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
String[] excludes={};
String[] includes={"username"};
builder.fetchSource(includes,excludes);
request.source(builder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
}
/**
* 组合查询
* @throws IOException
*/
@Test
void boolQuery() throws IOException {
SearchRequest request=new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//must是且 should是或
boolQueryBuilder.must(QueryBuilders.matchQuery("age",30));
boolQueryBuilder.must(QueryBuilders.matchQuery("sex","男"));
builder.query(boolQueryBuilder);
request.source(builder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
}
/**
* 范围查询
* @throws IOException
*/
@Test
void rangeQuery() throws IOException {
SearchRequest request=new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
rangeQuery.gte(30);
rangeQuery.lt(50);
builder.query(rangeQuery);
request.source(builder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
}
/**
* 模糊查询
* @throws IOException
*/
@Test
void fuzzyQuery() throws IOException {
SearchRequest request=new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
//Fuzziness.ONE代表查询相差一个字符的,wangwuw和wangw都会找到wangwu
FuzzyQueryBuilder fuzziness = QueryBuilders.fuzzyQuery("username", "wangwuw").fuzziness(Fuzziness.ONE);
builder.query(fuzziness);
request.source(builder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
}
/**
* 高亮查询
* @throws IOException
*/
@Test
void highLightQuery() throws IOException {
SearchRequest request=new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("username", "zhangsan");
HighlightBuilder highlightBuilder=new HighlightBuilder();
highlightBuilder.preTags("");
highlightBuilder.postTags("");
highlightBuilder.field("username");
builder.highlighter(highlightBuilder);
builder.query(termsQueryBuilder);
request.source(builder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
}
/**
* 最大值查询
* @throws IOException
*/
@Test
void maxQuery() throws IOException{
SearchRequest request=new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
AggregationBuilder aggregationBuilder= AggregationBuilders.max("maxAge").field("age");
builder.aggregation(aggregationBuilder);
request.source(builder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
}
/**
* 分组查询
* @throws IOException
*/
@Test
void groupQuery() throws IOException{
SearchRequest request=new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
AggregationBuilder aggregationBuilder= AggregationBuilders.terms("ageGroup").field("age");
builder.aggregation(aggregationBuilder);
request.source(builder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
}
}
留言与评论(共有 0 条评论) “” |