字典与字典的弹性匹配使用NEST

时间:2017-08-08 09:50:22

标签: elasticsearch nest

早上好,我正在尝试学习如何查询弹性,我有一个场景,我无法找到解决方案,我有一个Dictionary<Guid, List<int>>存储在Elastic上:

"myStoredDictionary": {
    "guidA": [14],
    "guidB": [16,17],
    "guidC": [30,31]}

我希望其他具有相同结构的词典能够匹配结果:

这些应该匹配:

"mySearchDictionary1": {
    "guidA": [14,15],
    "guidB": [16],
    "guidC": [30]}

"mySearchDictionary2": {
    "guidA": [14],
    "guidB": [16]}

"mySearchDictionary3": {
    "guidA": [14,15],
    "guidX": [0]
}

所以基本上逻辑是:对于两个字典上存在的每个键,存储的字典应该至少有一个来自搜索列表的整数。

有人可以给我一些关于如何处理这个问题的提示吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我通过将所有内容存储为一个简单的数组来解决这个问题,忽略了guid:

"values": [4,14,17,30]

然后使用必须使用每个guid的术语来做诀窍:

{
    "query": {
        "bool": {
            "must": [
                { "terms": { "values": [4,41,42,43] } },
                { "terms": { "values": [14,141,142,143] } },
                { "terms": { "values": [17,171,172,173] } }
            ]
        }
    }
}

因此,如果条件数组中的至少一个条目位于值列表中,则匹配。