使用文本索引在 MongoDB 中搜索单词的子字符串

问题描述 投票:0回答:1

我在 MongoDB 集合中有一个如下所示的文档,其中的文本索引位于“key1”上。

{
    "_id": 1,
    "key1": "this is the sentence",
    "key2": "some other sentence"
}

我正在尝试通过下面的查询来查找此记录。

db.collectionname.find({ $text: { $search: "enten" } })

这里,“enten”是单词“sentence”的子串。我尝试了上面的查询,但它没有返回此文档。

有没有一种方法可以通过单词的子字符串与文本索引一起进行搜索?

我知道我们可以在 key1 上使用常规索引并执行正则表达式搜索查询,但它似乎扫描 key1 的所有索引值,这似乎与完整集合扫描相同。

还有其他建议吗?

mongodb mongodb-query
1个回答
1
投票

你是对的。使用

$regex
弊大于利。您正在寻找的东西称为
nGram Search
。 MongoDB 文本索引目前不支持。

如果您部署在 MongoDB Atlas 平台上,您可以使用 Atlas 搜索功能来进行开箱即用的操作。从措辞来看,您似乎是自托管的,因此在这种情况下,您将必须自己实现。

这是一篇关于如何使用 MongoDB 实现相同功能的好文章 - 

https://danielcorcoranssql.wordpress.com/2020/07/06/fuzzy-search-with-mongodb-n-grams/

© www.soinside.com 2019 - 2024. All rights reserved.