поиск Azure работает около $ пропустить предел - PullRequest
0 голосов
/ 27 июня 2018

Я выполняю работу, чтобы проверить, все ли записи из моей базы данных существуют в Поиске Azure (около 610 Кб). Однако есть ограничение в 100000 с параметром $ skip. Есть ли способ обойти это ограничение?

Ответы [ 3 ]

0 голосов
/ 29 марта 2019

Я использую данные metadata_storage_last_modified в качестве фильтра, и мой пример приведен ниже.

    offset           skip              time
     0         --%-->  0
     100,000   --%-->  100,000      getLastTime
     101,000   --%-->  0            useLastTime
     200,000   --%-->   99,000      useLastTime
     201,000   --%-->  100,000      useLastTime & getLastTime
     202,000   --%-->  0            useLastTime

Поскольку предел пропуска равен 100 КБ, мы можем рассчитать пропуск по

AzureSearchSkipLimit = 100k
AzureSearchTopLimit = 1k
skip = offset % (AzureSearchSkipLimit + AzureSearchTopLimit)

Если общее количество запросов превысит AzureSearchSkipLimit , примените

orderby = "metadata_storage_last_modified desc"

Когда пропустить достичь AzureSearchSkipLimit , тогда получите metadata_storage_last_modified время от конца данных. И поместите metadata_storage_last_modified как следующий поисковый файл 100k.

filter = metadata_storage_last_modified lt ${metadata_storage_last_modified}
0 голосов
/ 24 мая 2019

Просто чтобы уточнить другие ответы: вы не можете напрямую обойти ограничение, но вы можете использовать обходной путь.

Вот что вы можете сделать:

1) Добавить уникальное поле в индекс. Содержимое может быть меткой времени изменения (если оно достаточно детализировано, чтобы сделать его уникальным) или, например, порядковым номером. Или же вы можете использовать для этого какое-то существующее уникальное поле.

2) Возьмите первые 100000 результатов из индекса, упорядоченного по вашему уникальному полю

3) Проверьте, какое максимальное значение (при упорядочении по возрастанию) в результатах для вашего уникального поля - таким образом, значение последней записи

4) Возьмите следующие 100000 результатов, упорядочив их по тому же уникальному полю и добавив фильтр, который берет результаты только в том случае, если значение уникального поля больше предыдущего максимума. Таким образом, те же самые первые 100000 значений не возвращаются, но мы получаем следующие 100000 значений.

5) Продолжайте, пока не получите все результаты

Недостатком является то, что вы не можете использовать другие пользовательские заказы с результатами, если вы не выполните заказ после получения результатов.

0 голосов
/ 27 июня 2018

Вы не можете фасетировать более 100 тысяч документов, однако вы можете добавить фасеты, чтобы обойти это. Например, допустим, у вас есть фасет с именем Страна, и ни у одного фасета нет более 100 тыс. Документов. Вы можете фасетировать все документы, где Страна == "Канада", а затем фасетировать все документы, где Страна == "США" и т. Д. *

...