2014-07-27 242 views
0

我想使用弹性搜索,我卡住试图查询嵌套的对象。弹性搜索嵌套对象映射和查询搜索

基本上我的目的是以下格式我用于嵌套字段

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

映射的是以下内容。

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

现在说我插入了/域元素/职位/ 1 /场/职位/ 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

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

找到区别。

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

谢谢!有没有可用于查询的调试器?还有什么方法去查询对象数组中的大多数匹配?与我在帖子 – sriram

+0

中发布的帖子类似,我使用感,我不知道任何。对于下一部分,也许你会作为单独的问题提出,所以其他用户很容易找到它。 – progrrammer

+0

好的。这也起作用:) – sriram