筛选查询处理器
2.8 版本引入
filter_query
搜索请求处理器会拦截一个搜索请求,并对该请求应用一个附加查询,从而筛选结果。当您不想重写应用程序中的现有查询但需要对结果进行额外筛选时,此功能非常有用。
请求正文字段
下表列出了所有可用的请求字段。
字段 | 数据类型 | 描述 |
---|---|---|
query | 对象 | 查询领域特定语言 (DSL) 中的查询。有关 OpenSearch 查询类型的列表,请参阅 查询 DSL。必需。 |
tag | 字符串 | 处理器的标识符。可选。 |
description | 字符串 | 处理器的描述。可选。 |
ignore_failure | 布尔型 | 如果为 true ,OpenSearch 将忽略此处理器的任何失败,并继续运行搜索管道中的其余处理器。可选。默认为 false 。 |
示例
以下示例演示了如何使用包含 filter_query
处理器的搜索管道。
设置
创建一个名为 my_index
的索引,并索引两个文档,一个公共文档和一个私人文档
POST /my_index/_doc/1
{
"message": "This is a public message",
"visibility":"public"
}
POST /my_index/_doc/2
{
"message": "This is a private message",
"visibility": "private"
}
创建搜索管道
以下请求创建一个名为 my_pipeline
的搜索管道,其中包含一个 filter_query
请求处理器,该处理器使用术语查询仅返回公共消息
PUT /_search/pipeline/my_pipeline
{
"request_processors": [
{
"filter_query" : {
"tag" : "tag1",
"description" : "This processor is going to restrict to publicly visible documents",
"query" : {
"term": {
"visibility": "public"
}
}
}
}
]
}
使用搜索管道
在不使用搜索管道的情况下搜索 my_index
中的文档
GET /my_index/_search
响应包含这两个文档
响应
{
"took" : 47,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "my_index",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"message" : "This is a public message",
"visibility" : "public"
}
},
{
"_index" : "my_index",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"message" : "This is a private message",
"visibility" : "private"
}
}
]
}
}
要使用管道进行搜索,请在 search_pipeline
查询参数中指定管道名称
GET /my_index/_search?search_pipeline=my_pipeline
响应仅包含可见性为 public
的文档
响应
{
"took" : 19,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.0,
"hits" : [
{
"_index" : "my_index",
"_id" : "1",
"_score" : 0.0,
"_source" : {
"message" : "This is a public message",
"visibility" : "public"
}
}
]
}
}