$ language给出意想不到的结果

时间:2017-04-14 20:33:45

标签: mongodb

我的文件:

{
  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如何,它总是会受到影响吗?

1 个答案:

答案 0 :(得分:1)

当您指定语言时,您告诉mongo使用特定于语言的停用词和后缀词干。如果您使用不同的语言来索引文档和查询文档,则由于不同语言中的规则不同,结果可能会出乎意料。在您的特定情况下,它必须是因为a是瑞典语中常见的构词后缀,但不是英语。

如果您需要支持多种语言,则需要specify language in the document本身。

如果您对完全匹配感兴趣,请使用语言' none'在索引和查询中。

在此处详细了解mongo中文本搜索的工作原理:https://docs.mongodb.com/manual/core/index-text/