Azure搜索 - 按表达式排序

时间:2016-06-15 08:02:05

标签: azure azure-search

我们想知道,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)。但目前这还不可能。

谢谢。

2 个答案:

答案 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中明确按分数排序。