Mongo 全文搜索未找到

Mongo full text search doesn't find

我正在尝试在我的 Mongo 数据库中实现全文搜索。它是音轨元数据的数据库。我不想按 artistNametitle 搜索 track。我在 tracks 集合中有这些记录(仅显示重要字段):

db.tracks.find({},{artistName: 1, title: 1})
{ "_id" : "A10328E00047516670", "artistName" : "Tapani Kansa", "title" : "Tuulia" }
{ "_id" : "A10328E00047516661", "artistName" : "Tapani Kansa", "title" : "Rakkautemme valssi" }
{ "_id" : "A10328E0004751669W", "artistName" : "Tapani Kansa", "title" : "Täysikuu" }
{ "_id" : "A10328E0004751668Y", "artistName" : "Tapani Kansa", "title" : "Muista minua" }

我已经为这个集合创建了文本索引:

db.tracks.createIndex({artistName: 'text', title: 'text', lyrics: 'text'})

但是当我尝试搜索曲目时,没有返回任何结果:

rs-ds047345:PRIMARY> db.tracks.find({$text: {$search: 'Tapani'}}).size()
0
rs-ds047345:PRIMARY> db.tracks.find({$text: {$search: 'Rakkautemme valssi'}}).size()
0

我无意中注意到,当我从搜索词的末尾裁剪一些字母时,我开始得到一些结果...所以全文搜索以某种方式起作用,只是不是我希望和期望的方式.

db.tracks.find({$text: {$search: 'Tapa'}}).size()
12
rs-ds047345:PRIMARY> db.tracks.find({$text: {$search: 'Rakkaute'}}).size()
1

谁能告诉我,我怎样才能使用全词搜索数据库,或者我做错了什么?

我已经在 MongoDB 版本 3.0.8 和 3.2.1

上试过了

根据规范 -

For case insensitive and diacritic insensitive text searches, the $text operator matches on the complete stemmed word. So if a document field contains the word blueberry, a search on the term blue will not match. However, blueberry or blueberries will match.

我建议的是普通索引和正则表达式搜索


 db.tracks.createIndex({"artistName": 1})
 db.tracks.createIndex({ "title" : 1})
 db.tracks.createIndex({ "lyrics": 1})

db.tracks.find({artistName:"/Tap/[0-10]"}).explain()

方括号将强制对正则表达式进行索引扫描而不是 colscan

正在 3.0.6 和 3.2.3 上测试,但没有成功:(

所以,问题出在数据库中存储的文档中。我没有注意到它们包含一个名为 language 的字段,它改变了全文搜索行为,尽管我试图通过在索引和查询中设置 language: 'none' 来禁用词干提取。

当我将 language 字段重命名为其他名称时,全文搜索开始正常工作。