Azure 对 Edm.Int32 和 Collection(Edm.String) 的搜索过滤性能
Azure search filtering performance over Edm.Int32 and Collection(Edm.String)
我在我的电子商务网站上使用 Azure 搜索,现在想实现过滤。
我遇到了性能问题。我有产品索引。每个产品都属于类别。每个类别都可以有嵌套的子类别。
我的业务目的是当客户在类别页面上时,我什至需要显示子类别中的产品,所以我对如何在 azure 产品索引中存储这种关系(产品到类别)有疑问。
我正在考虑两种可能性:
- 我只能在类型为 Edm.Int32 的字段中存储产品类别 ID。然后当客户进入这个类别时,我查询我的 sql 服务器以获取所有子类别 ID,然后构建我的查询以像这样索引
categoryId eq 34 or categoryId eq 36 or categoryId eq 37 ...
- 其他方法是创建类型为 Collection(Edm.String) 的字段,并在该字段中存储产品类别 ID 和嵌套类别 ID,然后我对索引的查询将如下所示
categoryIds/any(c: c eq '35')
那么哪种方式会更快?
选项 #2 可能更快,因为索引中的文档数量会少得多,但唯一可以确定的方法是 运行 对您的数据和查询进行一些实验。整体查询性能将取决于其他因素,例如您是否在进行全文搜索、分面、地理空间等。
我在我的电子商务网站上使用 Azure 搜索,现在想实现过滤。
我遇到了性能问题。我有产品索引。每个产品都属于类别。每个类别都可以有嵌套的子类别。 我的业务目的是当客户在类别页面上时,我什至需要显示子类别中的产品,所以我对如何在 azure 产品索引中存储这种关系(产品到类别)有疑问。 我正在考虑两种可能性:
- 我只能在类型为 Edm.Int32 的字段中存储产品类别 ID。然后当客户进入这个类别时,我查询我的 sql 服务器以获取所有子类别 ID,然后构建我的查询以像这样索引
categoryId eq 34 or categoryId eq 36 or categoryId eq 37 ...
- 其他方法是创建类型为 Collection(Edm.String) 的字段,并在该字段中存储产品类别 ID 和嵌套类别 ID,然后我对索引的查询将如下所示
categoryIds/any(c: c eq '35')
那么哪种方式会更快?
选项 #2 可能更快,因为索引中的文档数量会少得多,但唯一可以确定的方法是 运行 对您的数据和查询进行一些实验。整体查询性能将取决于其他因素,例如您是否在进行全文搜索、分面、地理空间等。