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

回到顶部