gpt4 book ai didi

javascript - Elasticsearch:在多个索引中返回唯一记录

转载 作者:行者123 更新时间:2023-12-03 02:25:05 24 4
gpt4 key购买 nike

我试图在多个索引之间返回唯一记录。

假设我有两个索引,即indexA和indexB。我的elasticsearch都查询了这两个索引。

如果我按字段名“类型”(这在两个索引中都有)进行过滤,我将如何仅获得唯一的?

示例:indexA的记录包含列“type”,值为“alpha”,而indexB的记录包含列“type”,其值为“alpha”。我的 Elasticsearch 查询应该只输出这些记录之一(不匹配哪个记录)。

到目前为止,我有这个:

searchParams = {
"body": {
"size": searchService.PAGE_SIZE,
"from": searchService.currentPage * searchService.PAGE_SIZE,
"query": {
"bool": {
"must": must
}
},
"aggs": {
"unique_type": {
"terms": {
"field": "type",
"size": 1
}
}
}
}
};

但这不起作用。

谢谢!

最佳答案

您的查询只需进行一些调整:更改size参数的值。

如何在多个索引中返回N个最常见的关键字类型值?

您可以使用terms聚合来做到这一点。
terms聚合中, size 参数限制了返回的存储桶数量。在您的情况下,您已将其设置为1,此聚合将仅返回1个存储桶。

将大小设置为10或其他合适的数量。这将返回该字段的N个最频繁的值(在您的情况下为type)。

顺便说一下,所有Elasticsearch搜索都可以完成across multiple indexes simultaneously

如果我还希望每个存储段都提供示例文档怎么办?

Bucket aggregations将收集给定类型的唯一值(称为存储桶),并计算存储桶中有多少个文档。

Aggregations返回整个结果集的一些统计信息,例如sql中的AVG()SUM()。它们是单个数字,而不是文档。在您的情况下,Elasticsearch将首先将文档集限制为仅与您指定的must查询匹配的文档,然后计算该文档集的所有聚合。

有没有办法让Elasticsearch从这些聚合结果中返回并为每个存储桶获取“热门”?有,它被称为 top_hits 聚合。在您的情况下,这种top_hits聚合将放在terms一个内部。
termstop_hits聚合都有其局限性,例如,如果它们太多或所有匹配的文档,它们将无法返回所有存储桶,因为Elasticsearch试图尽可能快。请检查相应的文档页面。

如果我确实需要一个字段的所有唯一值的完整列表怎么办?

在这种情况下,您可以对存储桶使用composite aggregation和分页,就像您已经对搜索结果进行分页一样(使用sizefrom)。

希望这可以帮助!

关于javascript - Elasticsearch:在多个索引中返回唯一记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61315074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com