elasticsearch中的匹配数组属性

Matching array property in elasticsearch

本文关键字:数组 属性 elasticsearch      更新时间:2023-09-26

我有以下文档,在一个名为users的索引中:

[ 
 {
   "name": "foo",
   "preferences": [{"id":1, "name":"a"}, {"id": 2, "name":"b"}]
 },
 {
   "name": "bar",
   "preferences": [{"id":2, "name":"a"}, {"id": 3, "name":"c"}, {"id": 4, "name":"d"}]
 }
]

和一个选择的id列表,例如var choosenPrefs=[2, 3],它匹配首选项的id属性。

现在,我想获得所有用户的首选项中至少有一个id。

我尝试了不同的查询,但没有得到它…

当前是这样的:

"query": {
    "bool": {
        "must": [
          {"prefix": {"name": ""}},
          {
            "terms": {
                "perferences.id": choosenPrefs
            }
          }
        ],
        "filter": {
            "geo_distance": {
                "distance": "10km",
                "location": position
            }
         }
     }
 }

我还使用了一个距离过滤器(它不需要首选项过滤/匹配)。

查询没有抛出任何错误,但是没有得到任何结果。

我希望有人能给点建议?!

PS:我使用的是最新的ES版本

您有一个错别字(perferences而不是preferences):

   "query": {
    "bool": {
        "must": [
          {"prefix": {"name": ""}},
          {
            "terms": {
                "preferences.id": [2,3]
            }
          }
        ],
        "filter": {
            "geo_distance": {
                "distance": "10km",
                "location": position
            }
         }
     }
 }