根据 MongoDB 中的字符串查找相似文档
Find similar documents based on a string in MongoDB
我需要在 MongoDB 数据库中找到所有 属性 包含与搜索词相似但允许一定百分比差异的字符串的文档。
简单地说 javascript 例如,我可以使用 https://www.npmjs.com/package/string-similarity 然后基本上匹配所有具有 > 90% 相似度分数的文档。
我希望将其作为 MongoDB 查询来执行,并尽可能提高性能,因为数据库包含数百万个文档。
在这种情况下我有哪些可能的选择?
- 我找到了有关 $text 搜索的一些信息,但似乎帮助不大
- 我正在考虑为每个文档创建某种签名,例如允许某种分歧的某种散列。
我真的很高兴每一个想法都能以最好的方式解决这个问题。
此问题的常见解决方案是使用搜索引擎数据库,例如 Elasticsearch
或 Atlas search
(由 Mongodb 团队提供)。我不会详细介绍这些数据库是如何工作的,但一般来说它们是一个反向索引数据库,这意味着你在插入时标记你的数据,然后你的查询 运行 在标记化数据而不是原始数据上设置。
这种方法非常强大,可以帮助解决许多“搜索引擎”问题,例如自动完成或在您的情况下所谓的“模糊”搜索。
让我们看看 elasticsearch 如何通过阅读他们的 fuzzy 特性来处理这个问题:
To find similar terms, the fuzzy query creates a set of all possible variations, or expansions, of the search term within a specified edit distance. The query then returns exact matches for each expansion.
基本上他们所做的是在给定参数内创建查询的所有“可能”排列。我个人建议您只使用这些数据库中的一个提供这种能力的 OOTB,但是如果您想在 Mongo 中做一个“伪”搜索引擎,您可以只使用这种方法(缺点是 Mongo 的索引是一棵树,因此您强制对这些查询进行树扫描,而不是为此设计的数据库)
我需要在 MongoDB 数据库中找到所有 属性 包含与搜索词相似但允许一定百分比差异的字符串的文档。
简单地说 javascript 例如,我可以使用 https://www.npmjs.com/package/string-similarity 然后基本上匹配所有具有 > 90% 相似度分数的文档。
我希望将其作为 MongoDB 查询来执行,并尽可能提高性能,因为数据库包含数百万个文档。
在这种情况下我有哪些可能的选择?
- 我找到了有关 $text 搜索的一些信息,但似乎帮助不大
- 我正在考虑为每个文档创建某种签名,例如允许某种分歧的某种散列。
我真的很高兴每一个想法都能以最好的方式解决这个问题。
此问题的常见解决方案是使用搜索引擎数据库,例如 Elasticsearch
或 Atlas search
(由 Mongodb 团队提供)。我不会详细介绍这些数据库是如何工作的,但一般来说它们是一个反向索引数据库,这意味着你在插入时标记你的数据,然后你的查询 运行 在标记化数据而不是原始数据上设置。
这种方法非常强大,可以帮助解决许多“搜索引擎”问题,例如自动完成或在您的情况下所谓的“模糊”搜索。
让我们看看 elasticsearch 如何通过阅读他们的 fuzzy 特性来处理这个问题:
To find similar terms, the fuzzy query creates a set of all possible variations, or expansions, of the search term within a specified edit distance. The query then returns exact matches for each expansion.
基本上他们所做的是在给定参数内创建查询的所有“可能”排列。我个人建议您只使用这些数据库中的一个提供这种能力的 OOTB,但是如果您想在 Mongo 中做一个“伪”搜索引擎,您可以只使用这种方法(缺点是 Mongo 的索引是一棵树,因此您强制对这些查询进行树扫描,而不是为此设计的数据库)