gpt4 book ai didi

elasticsearch - ElasticSearch:仅返回逻辑组的第一个结果

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

我有一个ElasticSearch索引,用于存储产品-例如在线商店。现在,我想在我的商店中介绍产品变型,但是我无法更改索引以使用某些嵌套或父/子数据类型,因为还有很多其他工具已经在使用该索引(我不想调整这些工具也)。我们只能添加一些额外的字段。
->我无法在索引时间将索引和组变体重建为逻辑组。

在查询时间获取此类项目的最佳选择是什么?
另一个问题:很多产品都是非变体的,因此我的查询结果必须返回变体(分组)和非变体单独项目的混合-它们必须全部由_score排序。
可能的选择:如果我们没有获得变体组的所有项目,而只有每个变体组的最佳结果,则可以。但是,我们必须确保不会将变体组的项目作为单独的搜索结果获得。

也许我们可以通过多个查询来实现它-例如首先对variant_id进行一些汇总,然后再进行另一个查询以获取所有项目

例:
索引了以下行:

{"title": "Samsung TV xxx"}
{"title": "Philips TV yyy"}
{"title": "Nike shoe MyRun", "size": 40, "variant_group": 5}
{"title": "Nike shoe MyRun", "size": 42, "variant_group": 5}
{"title": "Adidas shoe YourRun", "size": 39, "variant_group": 10}
{"title": "Adidas shoe YourRun", "size": 40, "variant_group": 10}
{"title": "Adidas shoe YourRun", "size": 46, "variant_group": 10}
{"title": "Dictionary book"}

我的查询与所有这些项目匹配,应返回以下文档:
{"title": "Samsung TV xxx"}
{"title": "Philips TV yyy"}
[
{"title": "Nike shoe MyRun", "size": 40, "variant_group": 5}
{"title": "Nike shoe MyRun", "size": 42, "variant_group": 5}
]
[
{"title": "Adidas shoe YourRun", "size": 39, "variant_group": 10}
{"title": "Adidas shoe YourRun", "size": 40, "variant_group": 10}
{"title": "Adidas shoe YourRun", "size": 46, "variant_group": 10}
{"title": "Dictionary book"}
]
{"title": "Dictionary book"}

或(每个变体组的最佳结果):
{"title": "Samsung TV xxx"}
{"title": "Philips TV yyy"}
{"title": "Nike shoe MyRun", "size": 40, "variant_group": 5}
{"title": "Adidas shoe YourRun", "size": 39, "variant_group": 10}
{"title": "Dictionary book"}

最佳答案

您可以将top hits sub-aggregation组合到术语聚合中:

curl -XGET 'localhost:9200/your_index/products/_search&pretty' -H 'Content-Type: application/json' -d'
{
@@@ your filters here @@@
"size": 0,
"aggs": {
"variant_groups": {
"terms": {
"field": "variant_group",
"size": 20,
"missing": "No group",
},
"aggs": {
"products_hits": {
"top_hits": {
"size" : 1
}
}
}
}
}
}
'

这将根据您对每个variant_group的过滤器返回最高产品。

当前,仅基于频率的前20个组,但是可以使用术语聚合的 ordersize参数更改顺序和大小。如果需要,可以使用较大的值。
missing参数定义应如何处理缺少值的文档。默认情况下,它们将被忽略,但也可以将它们视为具有值。

结果将在Elasticsearch响应的 aggregation部分中,而不是在查询根中使用 hits保留为空的 size: 0中。

关于elasticsearch - ElasticSearch:仅返回逻辑组的第一个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46452119/

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