gpt4 book ai didi

c# - Elasticsearch极限得分对多重匹配查询的影响

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

我有一个多匹配查询,它针对五个不同的字段进行匹配。我想限制此多匹配查询对整体查询的影响程度,以便如果由于某种原因,其中一个字段刚刚被搜索字词所淹没,则得分不会很高。我想要的是一种衰减的影响。我已经翻阅了文档,而我正努力寻找一种方法来做到这一点。我已经找到了衰减脚本函数docs(https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/function-score-query-usage.html),但是它们似乎都特定于单个字段,这对我没有太大帮助,因为我想将其应用于多重匹配查询。

这是我想限制影响的查询:

new MultiMatchQuery
{
Type = TextQueryType.MostFields,
Fields = Field<SearchableTour>(f => f.Name, 0.5)
.And(Field<SearchableTour>(f => f.StartCity, 0.1))
.And(Field<SearchableTour>(f => f.FinishCity, 0.1))
.And(Field<SearchableTour>(f => f.Description, 0.05))
.And(Field<SearchableTour>(f => f.ItineraryText, 0.01)),
Query = searchText,
Operator = Operator.And
}

基础数据不受我的控制,理论上有人可以用常见的搜索字词填充这些字段之一,以人为地将其结果提高到顶部。我想防止这种情况,但仍然允许这些字段产生有限的影响。似乎没有“最高分数”的概念,它可以让我限制这些字段的综合分数。

最佳答案

我认为您在正确的道路上。您应该能够将MultiMatchQuery插入所提供链接的查询部分,然后提供所需的任何分数函数。但是请注意,提供的衰减函数是针对数字,日期或地理位置字段的,因此您可能无法使用它们。我可能会做的是这样的:

new FunctionScoreQuery()
{
Query = new MultiMatchQuery{ ... },
ScoreMode = FunctionScoreMode.Sum,
Functions = new List<IScoreFunction>
{
new ScriptScoreFunction { Script = new InlineScript(##YourDecayFunction(_score)##) }
}
}

关于c# - Elasticsearch极限得分对多重匹配查询的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60487658/

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