繁体   English   中英

根据MongoDB中的字符串查找相似文档

[英]Find similar documents based on a string in MongoDB

我需要在 MongoDB 数据库中找到所有文档,这些文档的属性包含与搜索词相似但允许一定百分比差异的字符串。

例如,在普通的 javascript 中,我可以使用https://www.npmjs.com/package/string-similarity然后基本上匹配所有具有 > 90% 相似度分数的文档。

我想像 MongoDB 查询一样执行此操作,并尽可能提高性能,因为数据库包含数百万个文档。

在这种情况下我有什么可能的选择?

  • 我找到了一些关于 $text search 的东西,但似乎没什么用
  • 我正在考虑为每个文档创建某种签名,例如某种允许某种分歧的 hash。

我真的很高兴每一个想法都能以最好的方式解决这个问题。

这个问题的常见解决方案是使用搜索引擎数据库,例如ElasticsearchAtlas search (由 Mongodb 团队提供)。 我不会 go 详细介绍这些数据库的工作原理,但一般来说它们是一个反向索引数据库,这意味着您在插入时对数据进行标记,然后查询在标记化数据上运行,而不是在原始数据集上运行。

这种方法非常强大,可以帮助解决许多“搜索引擎”问题,例如自动完成或在您的情况下称为“模糊”搜索。

让我们看看 elasticsearch 是如何通过阅读他们的模糊特征来处理这个问题的:

为了找到相似的术语,模糊查询会在指定的编辑距离内创建一组搜索术语的所有可能变体或扩展。 然后查询返回每个扩展的精确匹配。

基本上他们所做的是在给定参数内创建查询的所有“可能”排列。 我个人建议你只使用这些数据库中的一个提供这种能力的 OOTB,但是如果你想在 Mongo 中做一个“伪”搜索引擎,你可以使用这种方法(Mongo 索引的缺点是树,所以你强制对这些查询进行树扫描,而不是为此设计的数据库)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM