c# - Azure 认知搜索:仅搜索用户拥有的内容 - 超过 10 万个项目
问题描述
我们的网站有一个仅限订阅者的区域,用户可以在其中搜索他们拥有的项目。目前,用户最多可以拥有的物品约为 200,000 件。据微软称,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, ...') 而不是等式表达式,则可以预期亚秒级响应时间。
传入 ~150k 值到search.in(...)
返回结果大约需要 4-8 秒,而正常搜索需要 ~.5 秒。这是通过search.in(...)
获取项目 ID 列表并将它们与我们索引中的项目 ID(关键字段,可过滤)进行比较。
有一个更好的方法吗?我真的很想将搜索时间缩短到 < 1 秒。
解决方案
推荐阅读
- react-native - React Native:成功登录后将电子邮件数组存储在 AsyncStorage 中
- node.js - 如何使用 Cloud Function 从 Cloud Storage for Firebase 获取对象?
- node.js - 直到我在 Visual Studio Code 中点击开始调试,一切都很好
- jenkins-pipeline - Docker in Docker - Jenkins Docker Pipeline - 如何连接到外部服务
- python - opencv 在使用 Kivy 和 Buildozer 创建 Android 应用程序时出现问题:/site-packages/cv2/cv2.so" 是 64 位而不是 32 位,targetsdk:27
- email - 如何在 Roundcube 上启用密码插件
- c# - 传递给 ViewDataDictionary 的模型项是“*”类型的,但是这个 ViewDataDictionary 实例需要一个“..IEnumerable[*]”类型的模型项
- google-cloud-platform - Google APIs Service Agent 服务帐号被误删
- typescript - 如何为返回新函数的函数设置正确的返回类型,最后一个参数是可选的
- c# - 使用 Azure AD 注销 SAML