Ran*_*yer 3 filter elasticsearch
我对查询和过滤器之间的差异有点困惑.我的困惑源于我在文档中读到的以下句子.
我想要的只是过滤4个属性值,放入日期范围和总和(聚合)几个字段.像这样
sum (salary, tenure) where name = A AND age = B AND join_date between X and Y
Run Code Online (Sandbox Code Playgroud)
Aar*_*onM 12
将查询视为模糊匹配,将过滤器视为传统数据库样式查询.如果它有助于将查询视为数据库LIKE,尽管更好.
查询将分析您的搜索,将其分解为多个位,然后搜索与您的查询类似的文档.每个文档获得最佳分数获胜的分数,并在结果集中按分数顺序返回.所有这些得分都很昂贵,会减慢你的反应速度.
过滤器说我只是包含或排除这段数据,不涉及分数.过滤器匹配并且包含doc或者不包含doc,它将被排除.这一切都很快发生,并且没有涉及排序.
您的示例"查询"不需要查询,它是名称= A和年龄= B的过滤器.查询可能包含与name = AA匹配的文档,因为它有点像A.所以您在名称上有一个术语过滤器一个术语过滤年龄,在join_date上有一个范围过滤器.然后,您可以进行聚合以获得SUM.
{
"query": {
"filtered": {
"filter": {
"and": [
{ "range": {
"join_date": {
"from": "X",
"to": "Y"
}
}},
{"term": { "name": "A" }},
{"term": { "age": "B" }},
]
}
}
},
"size": 0,
"aggs" : {
"salary_sum": {
"sum": { "field": "salary" }
},
"tenure_sum": {
"sum": { "field": "tenure" }
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4191 次 |
最近记录: |