要在 Haystack 搜索查询中添加过滤器或约束,可以使用 Filter
类或特定于文档存储的查询参数。过滤器允许您通过元数据字段(例如,日期、类别)缩小结果范围,或应用逻辑条件。例如,在 Haystack 的基于流水线的工作流程中,您可以将过滤器直接附加到 Retriever
(检索器)组件,或在执行前修改查询对象。这种方法适用于支持的数据库,如 Elasticsearch、Weaviate 或 PostgreSQL。
首先使用 Haystack 的 Filter
语法定义过滤器。对于基本的相等性检查,创建一个 Filter
对象并指定字段和值:
from haystack import Filter
news_filter = Filter(field="category", value="news")
将其作为检索器的 run
方法中的 filters
参数传入:
result = retriever.run(query="climate", filters=news_filter)
对于多个条件,逻辑地组合过滤器。使用 Filter.and_(filter1, filter2)
实现“AND”逻辑,或使用 Filter.or_(filter1, filter2)
实现“OR”逻辑。要查找在 2020 年之后发布且属于“技术”类别的文章,请使用:
date_filter = Filter(field="publish_date", operator=">", value="2020-01-01")
tech_filter = Filter(field="category", value="tech")
combined_filter = Filter.and_(date_filter, tech_filter)
对于更高级的约束,请使用查询构建器或数据库特定的语法。如果使用 Elasticsearch,可以直接利用其 DSL。
from elasticsearch_dsl import Q
es_query = Q("match", title="AI") & Q("range", views={"gt": 1000})
result = retriever.run(query=es_query)
在使用 Haystack 的 Pipeline
(流水线)时,可以通过在自定义组件中修改 query
对象来应用动态过滤器。例如,通过根据用户个人资料注入过滤器,将结果限制在其保存的偏好范围内。务必查看您的文档存储的文档,了解操作符支持(例如,in
、exists
)和性能方面的考虑。过滤器是在数据库级别应用的,确保高效的查询执行,而无需后处理。