按找到的文档中的字段分组
Group by field in found document
解释我想要完成的事情的最好方法是举例。
假设我有一个包含字段 name
和 color
以及 transaction_id
的对象。我想搜索 name
和 color
匹配指定值的文档,并且我可以使用布尔查询轻松完成。
但是,我不想要只使用搜索查询找到的文档。我还想要那些文档所属的事务,并且用 transaction_id
指定。例如,如果找到 transaction_id
等于 123 的文档,我希望查询 return 所有 transaction_id
等于 123 的文档。
当然,我可以用两个查询来做到这一点,第一个查询获取所有符合条件的文档,第二个查询 return 找到具有 transaction_id
值之一的所有文档在第一次查询中。
但是有什么方法可以在单个查询中完成吗?
您可以在事务和您的对象之间使用父子关系。或者嵌套非规范化数据以在交易中包含 objects。否则,您将不得不进行应用程序端连接,这意味着 2 个查询。
尝试类似于以下的索引映射,并在 objects 中包含一个 parent_id
。
{
"mappings": {
"transaction": {},
"object": {
"_parent": {
"type": "transaction"
}
}
}
}
延伸阅读:
https://www.elastic.co/guide/en/elasticsearch/guide/current/parent-child-mapping.html
解释我想要完成的事情的最好方法是举例。
假设我有一个包含字段 name
和 color
以及 transaction_id
的对象。我想搜索 name
和 color
匹配指定值的文档,并且我可以使用布尔查询轻松完成。
但是,我不想要只使用搜索查询找到的文档。我还想要那些文档所属的事务,并且用 transaction_id
指定。例如,如果找到 transaction_id
等于 123 的文档,我希望查询 return 所有 transaction_id
等于 123 的文档。
当然,我可以用两个查询来做到这一点,第一个查询获取所有符合条件的文档,第二个查询 return 找到具有 transaction_id
值之一的所有文档在第一次查询中。
但是有什么方法可以在单个查询中完成吗?
您可以在事务和您的对象之间使用父子关系。或者嵌套非规范化数据以在交易中包含 objects。否则,您将不得不进行应用程序端连接,这意味着 2 个查询。
尝试类似于以下的索引映射,并在 objects 中包含一个 parent_id
。
{
"mappings": {
"transaction": {},
"object": {
"_parent": {
"type": "transaction"
}
}
}
}
延伸阅读: https://www.elastic.co/guide/en/elasticsearch/guide/current/parent-child-mapping.html