1.百度百科
Elastic Search是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
2.使用背景
后台管理系统,针对前置系统的数据跟踪/查询/统计
3.就使用情况做出说明
① 在前置系统中将相应数据写入kafka,通过大数据平台的实时任务将kakfa的数据同步到ES中;
② 在后台管理系统中使用ES接口进行数据查询
4.ES使用简单语法
目前使用DSL类型接口进行查询,涉及单个查询、批量查询、聚合/折叠查询
① 单个查询
{
"app": "TEST",
"params": {
"dsl": {
"query": {
"term": {
"key": "123"
}
}
}
}
}
② 批量查询
{
"app": "TEST",
"params": {
"dsl": {
"query": {
"terms": {
"key": ["123", "124"]
}
}
}
}
}
③ 折叠(分页)+ 聚合(统计数量)(因为我们的平台并未返回给我们经过折叠后的数据的总数量信息)
{
"app": "TEST",
"params": {
"dsl": {
"from": 0,
"size": 10,
"_source": {
"excludes": [
"key4"
]
},
"query": {
"bool": {
"must": [
{
"term": {
"key1": "123"
}
},
{
"terms": {
"key2": [
"80"
]
}
},
{
"range": {
"key3": {
"gte": "20200119",
"lte": "20200419"
}
}
}
]
}
},
"sort": {
"key4": "desc"
},
"collapse": {
"field": "key6",
"inner_hits": {
"size": 1,
"name": "top_rated",
"sort": [
{
"key5": "asc"
}
]
}
},
"aggs": {
"task_count": {
"cardinality": {
"precision_threshold": 3000,
"field": "key6"
}
}
}
}
}
}
部分属性说明:
- from+size获取分页数据集
- _source excludes 在返回的字段中不包含key;includes 在返回的字段中包含此key
- query bool must/should 查询参数 must表示一定有值的 should可以部分有值
- term 等于;terms包含;match 匹配(多用于模糊查询和全文搜索);match_all 查询全部数据;range查询范围(gte 大于等于;lte小于等于;去掉e就是去掉等于);sort排序(asc升序;desc降序)
- collapse 字段折叠,我的简单理解就是将多条数据按照某个或者某几个字段进行压缩得到一条或者多条结果,filed折叠根据的字段;inner_hits在需要进行折叠的数据中按条件显示数据
- aggs 聚合,之前考虑过用聚合,但是因为涉及分页,聚合的分页是会按照from始终为0(本身是没有from),size按页数增加查询到内存中,进行分页,担心数据量过大导致接口性能受影响,选择了折叠;cardinality去重统计,涉及默认精度100,超过100的数量可能不准确,所以这里可以主动设置precision_threshold