文章目录
ClientUtil
bboss操作和访问elasticsearch提供两种模式,分别对应两个组件:
-
RestClientUtil:通用组件,提供所有不依赖dsl的功能,也可以直接接收dsl。
-
ConfigRestClientUtil:加载配置文件中的dsl来实现对es的操作
这两个组件分别通过org.frameworkset.elasticsearch.ElasticSearchHelper中提供的静态工厂方法获取其单实例对象,这些单实例对象是多线程并发安全的,分别说明如下:
加载配置文件中的dsl来实现对es的操作模式
public static ClientInterface getConfigRestClientUtil(String configFile)
public static ClientInterface getConfigRestClientUtil(String elasticSearch,String configFile) //elasticsearch参数指定了bboss中多集群配
通过这两个方法获取到的ClientInterface实例是多线程安全的、单实例对象。
所有不依赖dsl的功能,或直接接收dsl模式
public static ClientInterface getRestClientUtil()
public static ClientInterface getRestClientUtil(String elasticSearch) //elasticsearch参数指定了bboss中多集群配
通过这两个方法获取到的ClientInterface实例是多线程安全的、单实例对象。
直接操作dsl使用实例:
public void testDirectDslQuery(){
String queryAll = "{\"query\": {\"match_all\": {}}}";
ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
ESDatas<Demo> esDatas =clientUtil.searchList("demo/_search",//demo为索引表,_search为检索操作action
queryAll,//queryAll变量对应的dsl语句
Demo.class);
//获取结果对象列表
List<Demo> demos = esDatas.getDatas();
//获取总记录数
long totalSize = esDatas.getTotalSize();
System.out.println(totalSize);
}
基本功能
配置es查询dsl
在resources下创建配置文件estrace/ESTracesqlMapper.xml,配置一个query dsl脚本,名称为queryServiceByCondition,我们将在后面的ClientInterface 组件中通过queryServiceByCondition引用这个脚本,脚本内容定义如下:
<properties>
<property name="queryServiceByCondition">
<![CDATA[
{
"sort": [ ##排序
{
"startTime": {
"order": "desc"
}
}
],
#if($lastStartTime > 0)//search_after分页查询
"search_after": [#[lastStartTime]],
#end
"size": 100, ##每次返回100条记录
"query": {
"bool":{
"filter": [
{"term": { ##精确查找
"applicationName": #[application]
}}
#if($queryStatus.equals("success"))
,
{"term": { ##精确查找
"err": 0
}}
#elseif($queryStatus.equals("error"))
,
{"term": { ##精确查找
"err": 1
}}
#end
,
{"range": { ##指定时间范围
"startTime": {
"gte": #[startTime],
"lt": #[endTime]
}
}}
]
#if($queryCondition && !$queryCondition.equals(""))
,
"must" : {
"multi_match" : { ##分词检索,指定坐在多个field执行检索
"query" : #[queryCondition],
"fields" : [ "agentId", "applicationName" ,"endPoint","params","remoteAddr","rpc","exceptionInfo"]
}
}
#end
}
},
"aggs": {
"applicationsums": {
"terms": {
"field": "applicationName.keyword",##按应用名称进行统计计数
"size":10000
},
"aggs":{
"successsums" : {
"terms" : {
"field" : "err" ##按err标识统计每个应用的成功数和失败数,0标识成功,1标识失败
}
},
"elapsed_ranges" : {
"range" : {
"field" : "elapsed", ##按响应时间分段统计
"keyed" : true,
"ranges" : [
{ "key" : "1秒", "to" : 1000 },
{ "key" : "3秒", "from" : 1000, "to" : 3000 },
{ "key" : "5秒", "from" : 3000, "to" : 5000 },
{ "key" : "5秒以上", "from" : 5000 }
]
}
}
}
}
}
}]]>
</property>
</properties>
查询的java代码:
import org.frameworkset.elasticsearch.ElasticSearchHelper;
import org.frameworkset.elasticsearch.client.ClientInterface;
//加载配置文件,创建es客户端工具包
ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("estrace/ESTracesqlMapper.xml");
//构建查询条件对象
TraceExtraCriteria traceExtraCriteria = new TraceExtraCriteria();
traceExtraCriteria.setApplication("testweb88");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
traceExtraCriteria.setStartTime(dateFormat.parse("2017-09-02 00:00:00").getTime()