gpt4 book ai didi

elasticsearch - 使用应基于自定义权重值的过滤器时,是否可以计算匹配次数?

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

例如,我有索引pizzas。我有 bool(boolean) 过滤器

 "bool": {
"should": {
"toppings": [
{
"query": "Tomatoes"
},
{
"query": "Mushrooms"
}
]
}
}

ElasticSearch是否可以返回索引中所有披萨的匹配百分比,因此所有具有 mushrooms XOR tomatoes的披萨都将返回50%(如果两者都为-100%)。与其他浇头无关。

如果是,我们可以以这种方式扩展此功能,以便为每个打顶重量值添加。
例如,我对Tomatoes(50),Mushrooms(75)和Chili(100)感兴趣。
所以总的来说将是50 + 75 + 100 = 225
因此玛格丽特(Margherita)的西红柿和蘑菇室= 125。
因此,此披萨匹配百分比应返回近56%(125/225)。

我阅读了ElasticSearch指南,读了数百遍API文档,尝试了过滤器,查询,minimum_should_match,boost。我将至少在某些方向上进一步寻求帮助。

最佳答案

我可以看到三种不同的方法来执行此操作

命名查询

您可以在bool中使用named query,查看哪些查询与每个文档匹配。在客户端,您可以计算每个浇头的值并自己找到总和。

功能分数查询

{
"query": {
"function_score": {
"filter": {
"terms": {
"toppings": [
"Tomatoes",
"Mushrooms",
"chillies"
]
}
},
"functions": [
{
"weight": 100,
"filter": {
"toppings": "chillies"
}
},
{
"weight": 50,
"filter": {
"toppings": "Tomatoes"
}
},
{
"weight": 75,
"filter": {
"toppings": "Mushrooms"
}
}
],
"score_mode": "sum",
"boost_mode": "replace"
}
}
}

在上述文件中,具有辣椒,西红柿或蘑菇的食物将被匹配。对于存在的任何过滤器,它将创建一个提升值并将其添加。因此,函数给出的分数就是您要寻找的总和。现在,这将由查询分数代替。因此,文档的分数将是您要查找的数字。

脚本字段方法

在这里,您需要使用 script field。它将为每个文档创建一个附加字段,该字段使用脚本计算要查找的总和

关于elasticsearch - 使用应基于自定义权重值的过滤器时,是否可以计算匹配次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32266631/

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