Elasticsearch(ES)多条件过滤实现案例
要完成上述图片上的查询条件,也即需要同时符合多种过滤条件。
由于公司的服务器中安装的elasticsearch版本很老,升级不是很方便,所以是基于老版本,新版本相应的语句做一些改变也可以。
实现:(具体条件需要更改)(elasticsearch版本:2.3.2)
潜在优化:
1. "should": [
{"match_phrase": {"termID": "00:23:A5:30:45:AD"}},
{"match_phrase": {"material_id": "1520"}},
{"match_phrase": {"material_id": "1521"}}
],
"minimum_should_match": 2,
这个匹配可能是比较耗时的,采用match_phrase主要是因为低版本string类型,且创建index时,没有设置为not_anlyzed。
改成not_anlyzed(新版本用keyword类型,index=true),用filter - terms也许效率会提升;
2. 按项目而不是日期来定义索引,这样搜索范围将会大大缩小;
3. 采用最新版本elasticsearch,采用painless语言。
补充:
version:6.3(改良优化后)的实现代码: