使用“时,MongoDB中的全文搜索未找到预期结果”;无”;语言
我正在测试MongoDB(4.2.1)中的一个场景,并使用以下文档进行全文搜索:使用“时,MongoDB中的全文搜索未找到预期结果”;无”;语言,mongodb,full-text-search,Mongodb,Full Text Search,我正在测试MongoDB(4.2.1)中的一个场景,并使用以下文档进行全文搜索: { "_id" : "1", "t" : [ { "t" : "Stadt und Land and Fluss", "language" : "de" } ] } {
{
"_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)使用搜索语言删除变音符号
passes => pass => pass
passés => passé => passe
ex w/法语:
passes => pass => pass
passés => pass => pass
ex w/无语言(无词干):
passes => passes
passés => passes