搜索处理器
搜索处理器可以分为以下类型:
搜索请求处理器
搜索请求处理器会拦截搜索请求(查询和请求中传递的元数据),对搜索请求执行操作,然后将搜索请求提交到索引。
下表列出了所有支持的搜索请求处理器。
处理器 | 描述 | 最早可用版本 |
---|---|---|
filter_query | 添加用于过滤请求的过滤查询。 | 2.8 |
ml_inference | 调用已注册的机器学习(ML)模型以重写查询。 | 2.16 |
neural_query_enricher | 在索引或字段级别为神经搜索和神经稀疏搜索设置默认模型。 | 2.11 (神经), 2.13 (神经稀疏) |
neural_sparse_two_phase_processor | 加速神经稀疏查询。 | 2.15 |
oversample | 增加搜索请求的 size 参数,并将原始值存储在管道状态中。 | 2.12 |
script(脚本) | 添加一个在新增索引文档上运行的脚本。 | 2.8 |
搜索响应处理器
搜索响应处理器会拦截搜索响应和搜索请求(查询、结果以及请求中传递的元数据),对搜索响应执行操作,并返回搜索响应。
下表列出了所有支持的搜索响应处理器。
处理器 | 描述 | 最早可用版本 |
---|---|---|
collapse | 根据字段值对搜索结果进行去重,类似于搜索请求中的 collapse 。 | 2.12 |
hybrid_score_explanation | 当 explain 参数启用时,向搜索结果添加详细的评分信息,提供关于分数归一化、组合技术以及混合查询中各个分数计算的信息。 | 2.19 |
ml_inference | 调用已注册的机器学习(ML)模型,以便将模型输出作为额外的搜索响应字段。 | 2.16 |
personalize_search_ranking | 使用 Amazon Personalize 对搜索结果进行重新排序(需要设置 Amazon Personalize 服务)。 | 2.9 |
rename_field | 重命名现有字段。 | 2.8 |
rerank | 使用交叉编码器模型对搜索结果进行重新排序。 | 2.12 |
retrieval_augmented_generation | 用于对话式搜索中的检索增强生成 (RAG)。 | 2.10 (在 2.12 版本中普遍可用) |
sort(排序) | 按升序或降序对项数组进行排序。 | 2.16 |
split | 根据指定的分隔符将字符串字段拆分为子字符串数组。 | 2.17 |
truncate_hits | 在达到指定目标数量后丢弃搜索结果。可以撤销 oversample 请求处理器的效果。 | 2.12 |
搜索阶段结果处理器
搜索阶段结果处理器在协调节点级别的搜索阶段之间运行。它拦截从一个搜索阶段检索到的结果,并对其进行转换,然后将其传递到下一个搜索阶段。
下表列出了所有支持的搜索阶段结果处理器。
处理器 | 描述 | 最早可用版本 |
---|---|---|
normalization-processor | 拦截查询阶段结果,并在将文档传递到获取阶段之前对文档分数进行归一化和组合。 | 2.10 |
查看可用的处理器类型
您可以使用节点搜索管道 API 来查看可用的处理器类型
GET /_nodes/search_pipelines
响应中包含 search_pipelines
对象,其中列出了可用的请求和响应处理器
响应
{
"_nodes" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"cluster_name" : "runTask",
"nodes" : {
"36FHvCwHT6Srbm2ZniEPhA" : {
"name" : "runTask-0",
"transport_address" : "127.0.0.1:9300",
"host" : "127.0.0.1",
"ip" : "127.0.0.1",
"version" : "3.0.0",
"build_type" : "tar",
"build_hash" : "unknown",
"roles" : [
"cluster_manager",
"data",
"ingest",
"remote_cluster_client"
],
"attributes" : {
"testattr" : "test",
"shard_indexing_pressure_enabled" : "true"
},
"search_pipelines" : {
"request_processors" : [
{
"type" : "filter_query"
},
{
"type" : "script"
}
],
"response_processors" : [
{
"type" : "rename_field"
}
]
}
}
}
}
除了 OpenSearch 提供的处理器之外,插件也可能提供额外的处理器。
选择性启用处理器
由 search-pipeline-common 模块定义的处理器通过以下集群设置选择性启用:search.pipeline.common.request.processors.allowed
、search.pipeline.common.response.processors.allowed
或 search.pipeline.common.search.phase.results.processors.allowed
。如果未指定,则启用所有处理器。空列表会禁用所有处理器。移除已启用的处理器会导致使用它们的管道在节点重启后失败。