解释我想要完成的事情的最好方法就是举例。
我们假设我有一个包含字段name
和color
以及transaction_id
的对象。我想搜索name
和color
匹配指定值的文档,并且我可以使用布尔查询轻松完成。
但是,我不想只使用搜索查询找到的文档。我还想要这些文档所属的事务,并且使用transaction_id
指定。例如,如果找到transaction_id
等于123的文档,我希望我的查询返回transaction_id
等于123的所有文档。
当然,我可以使用两个查询来执行此操作,第一个用于获取与条件匹配的所有文档,第二个用于返回在第一个查询中找到transaction_id
个值之一的所有文档。
但有没有办法在一个查询中做到这一点?
答案 0 :(得分:1)
您可以在事务和对象之间使用父子关系。或者嵌套对数据进行非规范化以在事务中包含对象。否则,您将不得不进行应用程序端连接,这意味着2个查询。
尝试类似于以下内容的索引映射,并在对象中包含parent_id
。
{
"mappings": {
"transaction": {},
"object": {
"_parent": {
"type": "transaction"
}
}
}
}
进一步阅读: https://www.elastic.co/guide/en/elasticsearch/guide/current/parent-child-mapping.html