我的文件:
{
name: 'mcrtwrtretca'
}
我的索引:
{
"v" : 2,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "$**_text",
"ns" : "mydb.cvs",
"background" : true,
"weights" : {
"$**" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
查询1:
db.getCollection('cvs').find({$text: {$search: 'mcrtwrtretca', $language: 'english'}})
返回1项。
查询2:
db.getCollection('cvs').find({$text: {$search: 'mcrtwrtretca', $language: 'swedish'}})
返回0项。
查询3
db.getCollection('cvs').find({$text: {$search: 'mcrtwrtretca', $language: 'dutch'}})
返回1项。
如果我删除' a'最后,所有三个都返回结果。
我不明白。如果完全匹配,无论$language
如何,它总是会受到影响吗?
答案 0 :(得分:1)
当您指定语言时,您告诉mongo使用特定于语言的停用词和后缀词干。如果您使用不同的语言来索引文档和查询文档,则由于不同语言中的规则不同,结果可能会出乎意料。在您的特定情况下,它必须是因为a
是瑞典语中常见的构词后缀,但不是英语。
如果您需要支持多种语言,则需要specify language in the document本身。
如果您对完全匹配感兴趣,请使用语言' none'在索引和查询中。
在此处详细了解mongo中文本搜索的工作原理:https://docs.mongodb.com/manual/core/index-text/