【发布时间】:2019-08-01 09:52:13
【问题描述】:
如何在 mongo 文本查询中搜索相似的单词
相似词示例:'Jean' 'Jeann' 'Jeean' 'Jeaan'
我尝试了 mongo 的文本查询,我发现最好的事情是如果 2 个文档具有相同的单词但不同的值,我可以通过文本分数得到它们
我尝试过的示例:
我正在寻找“Jean”
{
'name': 'Jean foo',
'somethingElse': ['one', 'two', 'three']
},
{
'name': 'Jean bar',
'somethingElse': ['one']
},
,
{
'name': 'Jean',
'somethingElse': ['one']
}
我得到了 3 个带有文本分数的文档,它运行良好,但我无法得到这样的文档
{
'name': 'Jeaan',
'somethingElse': ['one']
}
数据示例:
{
'name': 'Jean',
'somethingElse': ['one', 'two', 'three']
},
{
'name': 'Jeaan',
'somethingElse': ['one']
}
{
'somethingElse': 'Jeann',
'categories': ['one', 'two']
}
【问题讨论】:
-
你应该给“相似词”一个更好的定义。你的例子可以用正则表达式解决:
db.collection.find({ name: { $regex: "J+e+a+n+"}}) -
在这个例子中,如果我查询'Jean',我会得到前 2 个 textScore 为 0.75 的文档,第 3 个是完美的 ``` { 'name': 'Jean foo', ' somethingElse': ['one', 'two', 'three'] }, { 'name': 'Jean bar', 'somethingElse': ['one'] }, , { 'name': 'Jean', ' somethingElse': ['one'] } ``` 但是如果我有一个像这样的文档,我希望它以例如 0.3 的分数返回,但它根本没有被返回,因为它与确切的名称不匹配'Jean' ``` { 'name': 'Jeaaan', 'somethingElse': ['one'] } ```
标签: mongodb