前瞻性搜索 azure DocumentDb 中的文档字段
Look ahead search on document fields in azure DocumentDb
我们有兴趣将 DocumentDb 用作许多数据源的数据存储,因此我们 运行 可以快速确定它是否符合我们正在寻找的标准。
我们热衷于提供的领域之一是某些领域的前瞻性搜索功能。这些传统上是使用 SQL LIKE 语法提供的,目前似乎不受支持。
在线搜索我看到有人在谈论集成 Azure 搜索,但对于这样一个简单的用例,这似乎是一种非常昂贵的机制。
我也看到有人提到了 UDF 的使用,但这似乎需要整个集合扫描,从性能的角度来看这是不切实际的。
有人有其他建议吗?我考虑的一件事是简单地使用 SQL table 并在每次文档为 inserted\updated\deleted?
时启动更新
DocumentDB 支持 STARTSWITH
和范围索引以支持 prefix/look 提前搜索。
您可以根据用户在文本框中键入的内容逐步进行如下查询:
SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "H")
SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "Hi")
SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "Hil")
SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "Hilton")
请注意,您必须使用 range index 配置集合或您用于这些查询的 path/property。您也可以扩展此方法来处理其他情况:
要以不区分大小写的方式进行查询,您必须存储搜索的小写形式 属性,并将其用于查询。
我遇到过类似的情况,当用户输入搜索词时需要进行快速查找。
我的场景是可能有成千上万的同时用户正在执行此类查找;在负载下对此进行测试时,为了避免饱和和节流,我们发现我们必须将 DocumentDB 请求单元 (RU) 吞吐量增加到一个在我们的特定情况下对我们来说在经济上不可行的点。
我们决定最好将 DocumentDB 用作持久存储,并且 'full' 数据检索 - 这个角色表现得非常好 - 而小型 ElasticSearch 集群扮演 it 专为 - text search
、faceted search
、weighted search
、stemming
以及与您的问题最相关的 autocomplete analyzers
和 completion suggesters
而设计。
ElasticSearch 中的提前查询、创建索引、自动完成分析器和查询时间'search as you type'的主题可以在here, here and here
中找到
您计划拥有多个数据源这一事实也可能使 ElasticSearch 集群方法在聚合搜索数据方面更具吸引力。
我使用 Azure 市场中可用的 Bitnami 模板创建了相对较小的实例,最重要的是,这使我能够将集群放置在与其他组件相同的虚拟网络上,从而大大提高了性能。
成本低于 Azure 搜索(它在后台使用 ElasticSearch)。
我们有兴趣将 DocumentDb 用作许多数据源的数据存储,因此我们 运行 可以快速确定它是否符合我们正在寻找的标准。
我们热衷于提供的领域之一是某些领域的前瞻性搜索功能。这些传统上是使用 SQL LIKE 语法提供的,目前似乎不受支持。
在线搜索我看到有人在谈论集成 Azure 搜索,但对于这样一个简单的用例,这似乎是一种非常昂贵的机制。
我也看到有人提到了 UDF 的使用,但这似乎需要整个集合扫描,从性能的角度来看这是不切实际的。
有人有其他建议吗?我考虑的一件事是简单地使用 SQL table 并在每次文档为 inserted\updated\deleted?
时启动更新DocumentDB 支持 STARTSWITH
和范围索引以支持 prefix/look 提前搜索。
您可以根据用户在文本框中键入的内容逐步进行如下查询:
SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "H")
SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "Hi")
SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "Hil")
SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "Hilton")
请注意,您必须使用 range index 配置集合或您用于这些查询的 path/property。您也可以扩展此方法来处理其他情况:
要以不区分大小写的方式进行查询,您必须存储搜索的小写形式 属性,并将其用于查询。
我遇到过类似的情况,当用户输入搜索词时需要进行快速查找。
我的场景是可能有成千上万的同时用户正在执行此类查找;在负载下对此进行测试时,为了避免饱和和节流,我们发现我们必须将 DocumentDB 请求单元 (RU) 吞吐量增加到一个在我们的特定情况下对我们来说在经济上不可行的点。
我们决定最好将 DocumentDB 用作持久存储,并且 'full' 数据检索 - 这个角色表现得非常好 - 而小型 ElasticSearch 集群扮演 it 专为 - text search
、faceted search
、weighted search
、stemming
以及与您的问题最相关的 autocomplete analyzers
和 completion suggesters
而设计。
ElasticSearch 中的提前查询、创建索引、自动完成分析器和查询时间'search as you type'的主题可以在here, here and here
中找到您计划拥有多个数据源这一事实也可能使 ElasticSearch 集群方法在聚合搜索数据方面更具吸引力。
我使用 Azure 市场中可用的 Bitnami 模板创建了相对较小的实例,最重要的是,这使我能够将集群放置在与其他组件相同的虚拟网络上,从而大大提高了性能。
成本低于 Azure 搜索(它在后台使用 ElasticSearch)。