Elasticsearch数组属性必须包含给定的数组项
我的文件看起来像:
{ "tags" => [
"tag1",
"tag2",
],
"name" => "Example 1"
}
{
"tags" => [
"tag1",
"tag3",
"tag4"
],
"name" => "Example 2"
}
我现在想要的是进行术语搜索,其中给定数组可能看起来像:
[tag1, tag3]
预期命中应在哪里:
{ "tags" => [
"tag1",
"tag3",
"tag4"
],
"name" => "Example 2"
}
但是,当我执行类似的查询时:
GET _search{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"terms": {
"tags": [
"tag1",
"tag3"
]
}
}
]
}
}
}
}
}
由于示例1和示例2都包含tag1或tag3,因此获得了“示例1”和“示例2”作为匹配。通过查看文档中的术语,我发现术语实际上是一个包含查询。
在这种情况下,如何在使用tag1和tag3查询时确保示例2是唯一匹配项?
回答:
您需要通过添加到过滤器来将
设置为 ,以便所有术语都必须包含在文档中才能被视为匹配项"execution":
"and"``terms
GET _search{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"terms": {
"tags": [
"tag1",
"tag3"
],
"execution": "and"
}
}
}
}
}
这实际上bool must
与使用所有术语的合集构建过滤器相同,但形式更紧凑。
以上是 Elasticsearch数组属性必须包含给定的数组项 的全部内容, 来源链接: utcz.com/qa/419788.html