我正在尝试将“复杂”功能移至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搜索中实现此类功能以改善提升结果的过程?
答案 0 :(得分:0)
我不确定我是否完全理解您的问题,但是,如果您的某些文档的关键字等于“ filterElements”集合中的任何ID,您似乎就想提高某些文档的评分。如果是这样的话,您可以使用lucene查询语言来完成一个查询: https://docs.microsoft.com/en-us/azure/search/search-query-lucene-examples
您可以进行如下搜索
OriginalSearchTerm或(OriginalSearchTerm AND键:(“ filterID1”或“ filterID2”或“ filterID3”))
这样,既匹配原始搜索词,又具有过滤器ID之一作为“关键字”字段一部分的文档,将比仅匹配原始搜索词的文档匹配度更高。在这种情况下,您也可以将术语提升称为关键字段的特定提升 如果是这样,您是否可以使用“期限提升”来实现这一目标? https://docs.microsoft.com/en-us/azure/search/search-query-lucene-examples#example-5-term-boosting
OriginalSearchTerm或(OriginalSearchTerm AND键:(“ filterID1”或“ filterID2”或“ filterID3”)^ 2)