我有一个包含嵌套对象的文档,如下所示:
{ "title" : "Title 1", "books": [{ "book_title": "b title 1", "year": 2014 }, { "book_title": "b title 2", "year": 2015 }] }
现在,我需要按书名(不是book_title)和年份(比如2014)来过滤书籍。我需要的输出将是:
{ "title" : "Title 1", "books": [{ "book_title": "b title 1", "year": 2014 }] }
当我使用嵌套过滤器时,即使它们不匹配,我也会得到所有嵌套对象。如何仅获取匹配的嵌套对象?
您需要使用以下嵌套inner_hits功能。
inner_hits
{ "_source": [ "title" ], "query": { "bool": { "must": [ { "match": { "title": "title 1" } }, { "nested": { "path": "books", "query": { "term": { "books.year": 2014 } }, "inner_hits": {} } } ] } } }
在输出中,您将确切地获得期望的结果,即title字段和嵌套books数组中的匹配书。
title
books