Azure Познавательный поиск: поиск только контента, принадлежащего пользователю - PullRequest
0 голосов
/ 17 апреля 2020

У нас есть раздел подписчика на нашем веб-сайте, где пользователи могут искать принадлежащие им товары. Большинство предметов, которые может иметь пользователь, в настоящее время составляет около 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>

...