首页 > 解决方案 > Azure 搜索 - 用于提升结果的自定义功能

问题描述

我正在尝试将“复杂”功能移至 Azure 搜索。此函数根据过滤器数据(来自搜索查询)和存储在结果元素中的数据计算每个结果元素的分数。分数用于提升结果。根据我的研究 Azure 搜索提供了结果提升,但它对我的要求来说太简单了。

示例函数:

//filterElementsIds - ids taken from search query filter
public double Score(IEnumerable<string> filterElementsIds, ResultElement element)
{
    double score = 0;

    foreach(var elem in element.ScoreForFilters)
        if (filterElementsIds.Any(x => x == elem.Key))
            score += elem.Value * 1.5;

    return score;
}

目前,我正在遍历 Azure 搜索返回的每个结果 - 计算我的应用程序中的分数和排序元素。

是否可以在 Azure 搜索中实现此类功能以改进提升结果的过程?

标签: azureazure-cognitive-search

解决方案


我不确定我是否完全理解您的问题,但如果某些文档的键等于您的“filterElements”集合中的任何 ID,您似乎正在尝试提高其分数。如果是这样,您可以使用 lucene 查询语言来制作执行此操作的查询: https ://docs.microsoft.com/en-us/azure/search/search-query-lucene-examples

你可以做一个看起来像这样的搜索

OriginalSearchTerm OR (OriginalSearchTerm AND key:("filterID1" OR "filterID2" OR "filterID3"))

这样,匹配原始搜索词以及将过滤器 ID 之一作为“关键”字段的一部分的文档将比仅匹配原始搜索词的文档匹配更高。在这种情况下,您还可以使用术语提升来对关键字段进行特定的提升。如果是这样,您可以使用“术语提升”来实现这一点吗? https://docs.microsoft.com/en-us/azure/search/search-query-lucene-examples#example-5-term-boosting

OriginalSearchTerm OR (OriginalSearchTerm AND key:("filterID1" OR "filterID2" OR "filterID3")^2)


推荐阅读