Filter ElasticSearch中查询和过滤器的不同之处
我对查询和过滤器之间的区别有点困惑。我的困惑源于我在文档中读到的以下句子Filter ElasticSearch中查询和过滤器的不同之处,filter,
elasticsearch,Filter,
elasticsearch,我对查询和过滤器之间的区别有点困惑。我的困惑源于我在文档中读到的以下句子 建议对查询使用筛选器,因为筛选器不会触发分数计算 仅当响应为是/否或精确搜索时,才应使用过滤器 过滤器可以有称为“查询过滤器”的查询(如“术语过滤器”等) 我只想通过4个属性值进行过滤,放入一个日期范围,并对几个字段求和(聚合)。像这样 sum (salary, tenure) where name = A AND age = B AND join_date between X and Y 将查询视为模糊匹配,将过滤器
sum (salary, tenure) where name = A AND age = B AND join_date between X and Y
将查询视为模糊匹配,将过滤器视为传统数据库样式的查询。如果它有助于将查询看作一个数据库,尽管更好 查询将分析您的搜索并将其分解为若干位,然后搜索与您的查询相似的文档。每个文档都会获得一个分数,最好的分数获胜,并在结果集中按分数顺序返回。所有这些评分都是昂贵的,会减慢你的反应 一个过滤器说,我只需包含或排除这段数据,不涉及分数。过滤器匹配且包含文档,或者不匹配且排除文档。这一切发生得很快,不涉及排序 您的示例“查询”不需要查询,它是name=a和age=B上的筛选器。查询可能包括与name=AA匹配的文档,因为它有点像a。因此,您有name上的术语筛选器和age上的术语筛选器,join\u date上有一个范围筛选器。然后,您可以进行聚合以得到您的总和
{
"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" }
}
}
}