使用“时,MongoDB中的全文搜索未找到预期结果”;无”;语言

使用“时,MongoDB中的全文搜索未找到预期结果”;无”;语言,mongodb,full-text-search,Mongodb,Full Text Search,我正在测试MongoDB(4.2.1)中的一个场景,并使用以下文档进行全文搜索: { "_id" : "1", "t" : [ { "t" : "Stadt und Land and Fluss", "language" : "de" } ] } {

我正在测试MongoDB(4.2.1)中的一个场景,并使用以下文档进行全文搜索:

{ 
    "_id" : "1", 
    "t" : [
        {
            "t" : "Stadt und Land and Fluss", 
            "language" : "de"
        }
    ]
}
{ 
    "_id" : "2" 
    "t" : [
        {
            "t" : "City and Country und River", 
            "language" : "en"
        }
    ]
}
每种语言的文本都是通过“语言”字段定义的。这两个文本只是示例文本

文档#1是英文的,但文本包含一个德语停止词。 文档#2是德语,但文本包含英语停止词

现在发生了以下情况:

场景1:使用默认语言按stopword搜索。
{$text:{$search:“}}}//不返回任何内容

我没有得到任何回报,因为它似乎使用英语停止词

但是如果我用德语停止词,我只能把英语拿回

{$text:{$search:“und”}//返回1

场景2:使用“无”语言按停止字搜索 如果我使用英语stopword,我会取回德语文档,反之亦然

{$text:{$search:“and”,$language:“none”}//返回2

{$text:{$search:“und”,$language:“none”}//返回1

场景3:使用默认语言按“正常”单词搜索 这与预期的效果一样:

{$text:{$search:“City”}//返回1

{$text:{$search:“statt”}//返回2

场景3:使用“无”语言按“正常”单词搜索 现在,当我在英文文本中搜索单词时,它变得非常奇怪

{$text:{$search:“City”,$language:“none”}//不返回任何内容

它适用于德语文档中的单词:

{$text:{$search:“statt”,$language:“none”}//返回2

这个词本身并不重要


我只是希望MongoDB尊重我的语言,停止使用语言。无论我是否创建嵌套文档,行为都是完全相同的。

它按预期工作,但文档具有很大的误导性

TL;DR不要使用$language进行搜索:在文本索引上使用非none语言搜索“none”。这将在词干索引中搜索非词干词,很可能会失败

我已经提交了一个关于MongoDB文档的问题,但直到现在它还没有更新:

在文本搜索中使用$language与索引默认语言的值不同的可能会导致非常意外的结果,包括找不到准确的匹配项(即使没有变音符号)

在大多数情况下,不应指定与默认语言不同的语言,除非您确切知道词干分析器对所使用的每种语言的工作方式

顺便说一句,“default_language”也有误导性(但文档记录正确),因为它不仅为搜索查询设置了默认语言,而且还一次性定义了文本的索引方式,包括词干和停止词

一个简单的例子:

db.test.insert({t: "bats"})
db.test.createIndex({t:"text"})
db.test.countDocuments({"$text":{"$search":"bats", "$language":"none"}});
-> 0
文本搜索是如何输入的

  • 为值编制索引:1)词干2)使用索引语言删除变音符号
  • 搜索词:1)词干2)使用搜索语言删除变音符号
ex w/英语:

passes => pass => pass
passés => passé => passe
ex w/法语:

passes => pass => pass
passés => pass => pass
ex w/无语言(无词干):

passes => passes
passés => passes