Поиск Azure - хотите, чтобы случайный набор результатов
Я пытаюсь заменить кластер ElasticSearch на службу поиска Azure, в основном из-за проблем с хостингом / мониторингом инфраструктуры. Пока что дела идут неплохо, но один из сценариев, которые мне нужно учитывать, - это получение 10 случайных результатов для запроса. В ElasticSearch мы просто использовали функцию RandomScore из библиотеки Nest, которая была достаточно хорошей.
Я немного читал о профилях оценки, но это, кажется, не соответствует тому, что мне нужно, так как в нем нет функции Random ScoringAggregationFunction.
Есть ли что-то, что мне не хватает, как это сделать изначально?
1 ответ
К сожалению, в Azure Search невозможно получить случайно отсортированные результаты. Пожалуйста, запросите эту функцию в нашем UserVoice, чтобы помочь нам расставить приоритеты: https://feedback.azure.com/forums/263029-azure-search
Обходной путь может состоять в том, чтобы добавить поле к вашему индексу, которое заполнено некоторым случайно сгенерированным целым числом в некотором диапазоне во время индекса. Когда вы вызываете 10 случайных документов, ваше приложение вместо этого случайным образом генерирует целые числа в этом диапазоне, чтобы создать предложение фильтра в этом поле для получения случайных результатов.
Пробую это сейчас. Я использую двухэтапный процесс:
- Создайте свой запрос, но установите
$count=true
а также$top=0
. Результат запроса должен содержать поле с именем @odata.count. - Затем вы можете случайным образом выбрать int от 0 до @ odata.count, затем использовать
$top=1
а также$skip=<random number>
чтобы вернуть одну случайную запись. Есть одно предостережение: $skip принимает только числа меньше 100000.