Elasticsearch极限得分对多匹配查询的影响

问题描述 投票:0回答:1

我有一个多匹配查询,它针对五个不同的字段进行匹配。我想限制此多匹配查询对整体查询的影响程度,以便如果由于某些原因,其中一个字段刚刚被搜索词所淹没,则得分不会很高。我想要的是一种衰减的影响。我已经翻阅了文档,而我正努力寻找一种方法来做到这一点。我已经找到了衰减脚本函数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
}

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

c# elasticsearch nest elasticsearch-query
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.