# 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