# dataw-commons-elasticsearch
**Repository Path**: codeclen/dataw-commons-elasticsearch
## Basic Information
- **Project Name**: dataw-commons-elasticsearch
- **Description**: Elasticsearch Client
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-08-27
- **Last Updated**: 2022-09-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
dataw-commons-elasticsearch
=========================
描述
------------
本项目的目的是为了简化web查询接口的开发,对不同索引使用同一个查询接口,不必要为每个索引创建一个Searcher,减少冗余代码,提高开发效率。
简单使用说明
-----------
Maven配置
```xml
com.dataw.commons
commons-elasticsearch
release version
```
ES配置:
````
####es config example
es.hosts=172.18.5.110:9501,172.18.5.111:9501,172.18.5.112:9501
es.cluster.name=gd_es_cluster
````
实体类Document声明
```java
@Document(index = "hawkeye-app-web-live", type = "live", parent = "user")
public class LiveEntity {
private Integer app_id;
/**
* 是否正在直播
*/
private Boolean is_living;
//.....
}
```
接口列表
```java
Client getClient();
/**
* 获取单个对象
* @param getQuery
* @param clazz
* @param
* @return
*/
T queryForObject(GetQuery getQuery, Class clazz);
/**
* 获取多个对象,但只能是没有父文档的索引文档
* @param mutilGetQuery
* @param clazz
* @param
* @return
*/
LinkedList mutilGetObject(MultiGetQuery mutilGetQuery, Class clazz);
/**
* 查询,获取列表
* @param searchQuery
* @param clazz
* @param
* @return
*/
List queryForList(SearchQuery searchQuery, Class clazz);
long count(SearchQuery searchQuery, Class clazz);
long count(SearchQuery searchQuery);
/**
* 查询获取一个分页对象
* @param searchQuery
* @param clazz
* @param
* @return
*/
Page queryForPage(SearchQuery searchQuery, Class clazz);
/**
* 只对最外层只有一层做处理
* @param searchQuery
* @return
*/
Map aggForOneAggBuilder(SearchQuery searchQuery);
/**
* 只对最外层只有一个agg的做处理,并指定Clazz
* @param searchQuery
* @param clazz
* @param
* @return
*/
Map aggForOneAggBuilder(SearchQuery searchQuery, Class clazz);
/**
* 只对最外层有多个Agg的做处理
* @param searchQuery
* @return
*/
List> aggForMultiAggBuilder(SearchQuery searchQuery);
/**
* 只对最外层有多个Agg的做处理,并指定Clazz
* @param searchQuery
* @param clazz
* @param
* @return
*/
List> aggForMultiAggBuilder(SearchQuery searchQuery, Class clazz);
/**
* 获取原始Agg结果
* @param searchQuery
* @return
*/
Map getAggregations(SearchQuery searchQuery);
Map getAggregations(SearchQuery searchQuery, Class clazz);
/**
* Scroll query
* @param searchQuery
* @param searchHandler
*/
void scrollQuery(SearchQuery searchQuery, SearchHandler searchHandler);
/**
* 更新子文档
* @param clazz
* @param id
* @param routing
* @param doc
* @param
*/
void updateDoc(Class clazz, String id, String routing, Map doc);
/**
* 更新父文档
* @param clazz
* @param id
* @param doc
* @param
*/
void updateDoc(Class clazz, String id, Map doc);
```
Client查询接口使用
```java
@Autowired
DatawSearchClient datawSearchClient;
@Test
public void queryObjects() throws Exception {
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.termQuery("state","6")).build();
List list = datawSearchClient.queryForList(searchQuery,EsAppContentExEntity.class);
for(EsAppContentExEntity object : list){
System.out.println(JSONObject.toJSONString(object,true));
}
}
//获取单个文档
@Test
public void getObject() throws Exception {
GetQuery getQuery = DatawQueryBuilders.getQuery("924327_1496310840000");
getQuery.setRouting("29127873");
LiveEntity liveEntity = datawSearchClient.queryForObject(getQuery, LiveEntity.class);
System.out.println(JSONObject.toJSONString(liveEntity,true));
}
//multi get
@Test
public void multiGetObject() throws Exception {
LinkedList ids = new LinkedList();
ids.add("5034604");
ids.add("14970160");
ids.add("11983931");
MultiGetQuery mutilGetQuery = DatawQueryBuilders.multiGetQuery(ids);
LinkedList liveEntityLinkedList = datawSearchClient.mutilGetObject(mutilGetQuery, LiveUserEntity.class);
for(LiveUserEntity object : liveEntityLinkedList){
System.out.println(JSONObject.toJSONString(object,true));
}
}
///分页查询
@Test
public void queryForPage() throws Exception {
Page page = new Page(1,10);
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.termQuery("app_id","9477")).withPage(page).build();
Page pageIn = datawSearchClient.queryForPage(searchQuery,LiveEntity.class);
System.out.println(JSON.toJSONString(pageIn, true));
}
//scroll query
//必须指定Class,用于类型转换
@Test
public void scrollQuery1() throws Exception {
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.must(QueryBuilders.termQuery("app_id","9477"));
queryBuilder.must(QueryBuilders.termQuery("is_living",true));
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.withIndices(new String[]{"hawkeye-app-web-live"})
.withTypes(new String[]{"live"}).build();
datawSearchClient.scrollQuery(searchQuery, new SearchHandler(LiveEntity.class) {
@Override
public void handle(List liveEntityList){
for(LiveEntity object : liveEntityList){
LOGGER.info(JSONObject.toJSONString(object));
LOGGER.info("-------------------------------------------");
}
}
});
}
//agg
@Test
public void aggForOneAggBuilder() throws Exception {
//build agg builder
DatawAggBuilder aggregationBuilder = new DatawAggBuilder(termsAgg).build();
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(queryBuilder).addDatawAggBuilder(aggregationBuilder).build();
Map resMap = searchClient.aggForOneAggBuilder(searchQuery, LiveEntity.class);
System.out.println(JSON.toJSONString(resMap, true));
}
//update doc
@Test
public void updateDoc() throws Exception {
Map doc = new LinkedHashMap<>();
doc.put("is_living", false);
datawSearchClient.updateDoc(LiveAnalysisEntity.class, "924327_1496310840000", "29127873", doc);
}
```
-----------
###声明
本项目参考Spring的开源项目:spring-data-elasticsearch
项目直接copy了spring-data-elasticsearch的部分代码,并引入我们常用的Aggs和其他自定义接口;
项目地址:https://github.com/spring-projects/spring-data-elasticsearch