匹配文档数组

时间:2015-07-03 06:43:26

标签: arrays elasticsearch

有没有办法匹配文档数组中的所有值?例如。如果我的搜索数组是["1","2","3","4","5"]而我的文档有

之类的字段

doc1:"arr":["1","3","5"]

doc2:"arr":["1","2","7","9"]

doc3:"arr":["1","8"]

然后只有第一个文档应该匹配,因为文档中的所有值都存在于搜索数组中。我尝试使用脚本过滤器(以获取数组的长度)并尝试使用minimum_should_match参数,但我无法使其工作。如何将脚本创建的变量用作minimum_should_match的参数?

1 个答案:

答案 0 :(得分:0)

无法直接搜索数组来检查是否包含。因为 分析器 会分析搜索键并匹配它,如果有任何匹配的键,它将返回结果。

如果要匹配数组是否包含指定的数组,需要将搜索到的数组拆分为多个术语,如:

{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "must": [{
                        "term": {
                            "number": 1
                        }
                    }, {
                        "term": {
                            "number": 2
                        }
                    }, {
                        "term": {
                            "number": 7
                        }
                    }, {
                        "term": {
                            "number": 9
                        }
                    }]
                }
            }
        }
    }
}