弹性搜索嵌套对象映射和查询搜索

时间:2014-07-27 02:09:18

标签: elasticsearch sense

我正在尝试使用弹性搜索,我试图查询嵌套对象。

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

{
     "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等插入元素。我有field2.prop1的k值,我想要一个查询,根据field2.prop1的大多数匹配对帖子进行排序在我拥有的K值中。什么是适当的查询。 我也尝试了一个简单的过滤器,但即便看起来也不行。

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

以上查询应至少匹配第一篇文章。但它没有返回匹配。任何人都可以帮忙澄清这里的错误吗?

1 个答案:

答案 0 :(得分:1)

你的json结构中存在问题,你使用过滤查询,但过滤器(对象)与查询不同。

找出差异。

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