【发布时间】:2017-04-05 18:01:06
【问题描述】:
我有一个包含整数数组的字段。我需要能够实现一个查询,过滤掉包含仅该数组中特定值集的文档。
例如,假设我创建了以下索引:
PUT /test/stuff/1
{
"foo": [1,2,3]
}
PUT /test/stuff/2
{
"foo": [2]
}
PUT /test/stuff/3
{
"foo": [1,3]
}
现在我想获取“foo”包含任何不在 [2,4] 中的值的所有文档。我想要返回 ID 为 1 和 3 的文档。并不是说文档 1 确实包含值 2,而是还包含其他值。像这样一个简单的must_not 会过滤掉文档1:
POST /test/stuff/_search
{
"query": {
"bool": {
"must" : {
"match_all": {}
},
"filter" : {
"bool": {
"must_not": [
{
"terms" : {"foo" : [2,4]}
}
]
}
}
}
}
}
上面的查询只会匹配文档 3。有没有办法重写它以包括文档 1?
【问题讨论】:
-
所以你想要 [2,4] 的结果类似于“或”搜索(析取)与字段 'foo' 的所有其他值?
-
我希望结果包含 foo 包含任何不是 2 或 4 的值的文档。2 或 4 也可以存在,但必须至少存在一个其他值。
标签: elasticsearch