elasticsearch 封装工具类
时间: 2024-04-30 14:16:15 浏览: 284
Elasticsearch是一个开源的分布式搜索和分析引擎,它可以用于快速、准确地搜索、分析和存储大量数据。为了方便使用Elasticsearch,可以使用封装工具类来简化开发过程。
封装工具类可以提供以下功能:
1. 连接管理:封装工具类可以提供连接Elasticsearch集群的功能,包括连接池管理、连接的创建和关闭等。
2. 索引管理:封装工具类可以提供索引的创建、删除、更新等操作,以及索引的映射设置。
3. 文档操作:封装工具类可以提供文档的增删改查操作,包括文档的索引、更新、删除和搜索等。
4. 查询构建:封装工具类可以提供简化查询构建的方法,例如通过DSL语句构建查询条件。
5. 高级功能支持:封装工具类可以提供一些高级功能的支持,例如聚合查询、分页查询、排序等。
使用封装工具类可以简化Elasticsearch的操作,提高开发效率。常见的Elasticsearch封装工具类有ElasticsearchTemplate、Spring Data Elasticsearch等。
相关问题
Elasticsearch工具类的封装
Elasticsearch是一个开源的分布式搜索引擎,它可以快速地存储、搜索和分析大量数据。在实际的使用中,我们通常需要对Elasticsearch进行一些封装,以简化API的使用。下面是一个Java工具类的封装示例:
```java
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ElasticsearchUtil {
private RestHighLevelClient restHighLevelClient;
public ElasticsearchUtil(RestHighLevelClient restHighLevelClient) {
this.restHighLevelClient = restHighLevelClient;
}
/**
* 查询数据
*
* @param indexName 索引名称
* @param typeName 类型名称
* @param queryMap 查询条件
* @param from 起始位置
* @param size 返回数量
* @return
* @throws IOException
*/
public List<Map<String, Object>> search(String indexName, String typeName, Map<String, Object> queryMap, int from, int size) throws IOException {
SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.types(typeName);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
for (Map.Entry<String, Object> entry : queryMap.entrySet()) {
searchSourceBuilder.query(QueryBuilders.matchQuery(entry.getKey(), entry.getValue()));
}
searchSourceBuilder.from(from);
searchSourceBuilder.size(size);
searchSourceBuilder.timeout(TimeValue.timeValueSeconds(60));
searchRequest.source(searchSourceBuilder);
searchRequest.searchType(SearchType.DFS_QUERY_THEN_FETCH);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest);
List<Map<String, Object>> resultList = new ArrayList<>();
for (SearchHit searchHit : searchResponse.getHits()) {
resultList.add(searchHit.getSourceAsMap());
}
return resultList;
}
//其他操作方法
}
```
这个工具类主要提供了查询数据的方法,支持基于多个属性的匹配查询,同时也可以设置从哪个位置开始返回、返回多少条数据等参数。在实际使用中,我们可以根据需求进一步封装其他操作,如新增、删除、更新等。
ElasticsearchRestTemplate封装工具类
以下是一个ElasticsearchRestTemplate封装工具类的示例:
```java
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class ElasticsearchUtil {
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
@Autowired
private RestHighLevelClient restHighLevelClient;
/**
* 根据查询条件查询文档列表
*
* @param queryBuilder 查询条件
* @param clazz 文档类型
* @param <T> 泛型
* @return 文档列表
*/
public <T> List<T> search(QueryBuilder queryBuilder, Class<T> clazz) {
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.build();
return elasticsearchRestTemplate.queryForList(searchQuery, clazz);
}
/**
* 根据查询条件查询文档列表
*
* @param searchRequest 查询请求
* @param clazz 文档类型
* @param <T> 泛型
* @return 文档列表
*/
public <T> List<T> search(SearchRequest searchRequest, Class<T> clazz) {
SearchResponse searchResponse = null;
try {
searchResponse = restHighLevelClient.search(searchRequest);
} catch (Exception e) {
e.printStackTrace();
}
return elasticsearchRestTemplate.responseToList(searchResponse, clazz);
}
/**
* 根据查询条件查询文档列表
*
* @param searchSourceBuilder 查询条件
* @param clazz 文档类型
* @param <T> 泛型
* @return 文档列表
*/
public <T> List<T> search(SearchSourceBuilder searchSourceBuilder, Class<T> clazz) {
SearchRequest searchRequest = new SearchRequest();
searchRequest.source(searchSourceBuilder);
return search(searchRequest, clazz);
}
}
```
该工具类封装了ElasticsearchRestTemplate提供的API,可以根据查询条件查询文档列表,并返回指定类型的文档列表。其中,search方法有三个重载,分别接受QueryBuilder、SearchRequest和SearchSourceBuilder类型的查询条件。在使用该工具类时,只需要注入ElasticsearchUtil即可。
阅读全文