0

我正在尝试使用 Elastic Search,但我一直在尝试查询嵌套对象。

基本上我的对象是以下格式

{
     "name" : "Some Name",
     "field2": [
          { 
            "prop1": "val1",
            "prop2": "val2"
          },
          {
             "prop1": "val3",
             "prop2":: "val4"
          }
      ]
}

我用于嵌套字段的映射如下。

PUT /someval/posts/_mapping
{
    "posts": {
       "properties": {
           "field2": {
              "type": "nested"
           }
        }
    }
}

现在说我为 /field/posts/1 和 /field/posts/2 等插入元素。我有 k 个 field2.prop1 的值,我想要一个查询,它根据 K 中 field2.prop1 的大多数匹配对帖子进行排序我的价值观。什么是合适的查询。我也尝试了一个简单的过滤器,但即使这样似乎也不能正常工作。

GET /someval/posts/_search
{
 "query": {
   "filtered": {
     "query": {
        "match_all": {}
     }
   },
   "filter" : {
        "nested" : {
            "path" : "field2",
            "filter" : {
                "bool" : {
                    "must" : [
                        {
                            "term" : {"field2.prop1" : "val1"}
                        }
                    ]
                }
            },
            "_cache" : true
        }
    }
  } 
 }

上面的查询应该至少匹配第一个帖子。但它不返回匹配项。任何人都可以帮助澄清这里有什么问题吗?

4

1 回答 1

1

您的 json 结构存在问题,您使用了过滤查询,但 filter(object) 与查询处于不同级别。

找出不同之处。

POST /someval/posts/_search
{
   "query": {
      "filtered": {
         "query": {
            "match_all": {}
         },
         "filter": {
            "nested": {
               "path": "field2",
               "filter": {
                  "bool": {
                     "must": [
                        {
                           "term": {
                              "field2.prop1": "val1"
                           }
                        }
                     ]
                  }
               },
               "_cache": true
            }
         }
      }
   }
}
于 2014-07-27T03:34:40.570 回答