Elasticsearch嵌套查询匹配和/或

问题描述:

例如,我有一个包含数据如下:Elasticsearch嵌套查询匹配和/或

{ 
    author: "test", 
    books: [ 
    { 
     name: "first book", 
     cost: 50 
    }, 
    { 
     name: "second book", 
     cost: 100 
    } 
    ] 
} 

我想搜索的拥有所有书籍cost > 40的作者。这个查询将如何?字段books被映射为nested property

对于大于40(在次点击)一种书的成本作者姓名,如下一些查询会工作

POST http://192.168.0.68:9200/library/Book/_search 
{ 
    "fields": ["author"], 
    "query": { 
     "filtered": { 
     "query": { 
      "match_all": {} 
     }, 
     "filter": { 
      "nested": { 
       "path": "books", 
       "filter": { 
        "range": { 
        "books.cost": { 
         "gt": 40 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 

对于具有成本更大的所有书籍超过40,我不得不在获得响应后,在客户端手动处理嵌套字段的集合

不确定脚本是否适用于此处以将过滤器应用于所有嵌套对象。

参考

document not in nested documents elasticsearch

+0

没错使用该查询以及对任何书籍大于40,效果很好。但是,所有人似乎都是一个难题。客户端过滤器将是我最后的手段,但如果它在弹性搜索中根本不可能的话。谢谢! – 2014-09-03 07:21:13