我们想知道,Azure Search是否可以在下述情况下实现。
让我们拥有一个包含三列的Azure搜索索引:
1. Id [Edm.String]
2. Tags [Collection(Edm.String)]
3. MaxScore [Edm.Int32]
索引包含以下两个条目:
Id Tags MaxScore
1 Paris,London,Rome 30
2 Paris 10
我们还有一个得分配置文件和一个Tag(Sum,Linear)类型的评分函数,用于评估每个标签10个点(boost = 10)。
我们希望在此索引中搜索带有“Paris,London”标签的记录,并根据合规百分比对其进行排序,而100%是MaxScore列中的值。
问题在于,默认情况下,Azure搜索会按分数对记录进行排序。结果如下:
Id Tags MaxScore Score %
1 Paris,London,Rome 30 20 67%
2 Paris 10 10 100%
但我们需要按[%]列的降序对记录进行排序。只需使Azure Search能够按表达式对记录进行排序就足够了。在我们的案例中,它会像$ orderby =得分*(100 / MaxScore)。但目前这还不可能。
谢谢。
答案 0 :(得分:1)
我确实根据日期列进行了排序,希望这会有所帮助。 如果需要,我在这里也使用.NET SDK,也需要REST API中可用的相同选项。
public async Task<DocumentSearchResult<Documents>> FileSearchResultsAsync(SearchRequest searchRequest)
{
try
{
SearchParameters sp = new SearchParameters()
{
SearchMode = SearchMode.Any,
Facets = new List<String>() { "state,count:25,sort:value",
"fileType,count:25,sort:value"
},
Top = 10,
Skip = searchRequest.PageNumber > 1 ? searchRequest.PageNumber * 10 : 0,
OrderBy = searchRequest.SortOrder == SortOrder.Recent ? new List<string> { "pubDate desc" } : new List<string> { "" },
IncludeTotalResultCount = true,
Select = new List<string>
{
"fileName",
"state",
"fileType",
"pubDate"
},
Filter = BuildFacetFilter(searchRequest)
};
return await searchConfig.IndexClient.Documents.SearchAsync<Documents>(searchRequest.SearchQuery, sp);
}
catch (Exception)
{
throw;
}
}
答案 1 :(得分:0)
Azure Search目前不支持此方案。请考虑在我们的User Voice网站上添加一个项目,以支持$orderby
中的表达式。另外,请对this suggestion进行投票,以支持在$orderby
中明确按分数排序。