elasticsearch过滤器filter:原理及使用
在Elasticsearch中,filterer是一种特殊类型的查询,它用于筛选出满足特定条件的文档,但不会计算得分,也不会影响排序。这使得它在后台执行时更快,因为不需要进行得分计算。
Filterer主要有两种类型:
- 简单filterer:这些是用来进行基本筛选的filterer,例如:
- 范围filterer:用于筛选出在特定范围内的值的文档。
- 标签filterer:用于筛选出具有特定标签的文档。
- 存在filterer:用于筛选出包含特定字段的文档。
- 复合filterer:这些filterer可以将多个filterer逻辑组合在一起,例如:
- 布尔filterer:可以使用布尔逻辑(MUST, SHOULD, MUST NOT)组合多个filterer。
- 分组filterer:可以将多个filterer分组,并对每组设置排他性和必要性。
下面是一个简单的例子,使用Elasticsearch的Python客户端,使用布尔filterer筛选出多个条件下的文档:
from elasticsearch import Elasticsearch
from elasticsearch.dsl import Q
es = Elasticsearch()
# 使用布尔filterer
bool_filter = Q('range', age={'gte': 20, 'lte': 40}) & Q('term', gender='male')
# 执行查询
res = es.search(
index='your_index',
filter_path=['hits.hits._source'],
search_type='dfs_query_then_fetch',
body={
'query': {
'bool': bool_filter
}
}
)
# 打印结果
print(res['hits']['hits'])
在这个例子中,我们使用了布尔filterer来筛选出年龄在20到40岁之间并且性别为男性的文档。这个查询不会考虑文档相关性得分,也不会根据得分对结果进行排序,因此它在后台执行时更快。
评论已关闭