Поиск Azure - сортировка по выражению

Мы хотели бы знать, допускает ли поиск Azure описанный ниже сценарий.

Пусть у нас будет индекс поиска 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).

Мы хотим найти в этом индексе записи с тегами «Париж, Лондон» и отсортировать их по проценту соответствия, а 100% - это значение в столбце MaxScore.

Проблема в том, что по умолчанию поиск Azure сортирует записи по баллу. Итак, результаты следующие:

Id  Tags                MaxScore    Score     %
1   Paris,London,Rome   30          20        67%
2   Paris               10          10        100%

Но нам нужно отсортировать записи в порядке убывания по столбцу [%]. Этого было бы достаточно, чтобы позволить поиску Azure сортировать записи по выражению. В нашем случае это будет что-то вроде $ orderby = score * (100 / MaxScore). Однако в настоящее время это невозможно.

Спасибо.


person Keeble    schedule 15.06.2016    source источник


Ответы (2)


Поиск Azure в настоящее время не поддерживает этот сценарий. Пожалуйста, подумайте о добавлении элемента на наш User Voice сайт для поддержки выражений в $orderby. Кроме того, проголосуйте за это предложение для поддержки явной сортировки по очкам в $orderby.

person Bruce Johnston    schedule 16.06.2016

Я сделал сортировку по столбцам дат, надеюсь, это может быть полезно. Здесь я использую .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;
        }
    }
person Muni Chittem    schedule 15.10.2019