【问题标题】:Matching array property in elasticsearch在弹性搜索中匹配数组属性
【发布时间】:2017-03-17 00:09:30
【问题描述】:

我在名为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版本

【问题讨论】:

    标签: javascript json elasticsearch


    【解决方案1】:

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

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

    【讨论】:

    • 天哪,多么愚蠢(无模式数据库的缺点... :))谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 2017-01-09
    相关资源
    最近更新 更多