У нас есть раздел подписчика на нашем веб-сайте, где пользователи могут искать принадлежащие им товары. Большинство предметов, которые может иметь пользователь, в настоящее время составляет около 200 000. Согласно Microsoft, search.in(...)
может использоваться для «фильтрации тысяч значений с временем отклика менее секунды».
https://docs.microsoft.com/en-us/azure/search/search-security-trimming-for-azure-search
В одну сторону добиться фильтрации безопасности можно с помощью сложной дизъюнкции выражений равенства: например, Id eq 'id1' или Id eq 'id2' и т. д. Этот подход подвержен ошибкам, сложен в обслуживании и в тех случаях, когда список содержит сотни или тысячи значений , замедляет время ответа на запрос на многие секунды.
Более простой и быстрый подход через функцию search.in. Если вы используете search.in (Id, 'id1, id2, ...') вместо выражения равенства, вы можете ожидать, что время отклика не превысит доли секунды .
Passing от ~ 150k значений до search.in(...)
для возврата результатов требуется около 4-8 секунд, по сравнению с ~ 0,5 секунды обычного поиска. Это из-за того, что search.in(...)
берет список идентификаторов элементов и сравнивает их с идентификатором элемента (ключевое поле, фильтруемое) в нашем индексе.
Есть ли лучший способ сделать это? Я действительно хотел бы сократить поиск до <1 секунды. </p>