2017-08-08 61 views
0

早上好词典弹性的比赛,我想了解如何查询弹性和我有,我不能找到解决办法的情况下,我都存储在弹性为Dictionary<Guid, List<int>>与使用NEST

"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] 
} 

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

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

回答

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] } } 
      ] 
     } 
    } 
} 

所以,如果术语数组中至少有一个条目位于值列表中,是一个匹配项。