Hon*_*ýbl 5 full-text-search mongodb
我正在尝试在我的 Mongo 数据库中实现全文搜索。它是音轨元数据的数据库。我不想按artistName进行title搜索track。我的集合中有这些记录tracks(仅显示重要字段):
db.tracks.find({},{artistName: 1, title: 1})\n{ "_id" : "A10328E00047516670", "artistName" : "Tapani Kansa", "title" : "Tuulia" }\n{ "_id" : "A10328E00047516661", "artistName" : "Tapani Kansa", "title" : "Rakkautemme valssi" }\n{ "_id" : "A10328E0004751669W", "artistName" : "Tapani Kansa", "title" : "T\xc3\xa4ysikuu" }\n{ "_id" : "A10328E0004751668Y", "artistName" : "Tapani Kansa", "title" : "Muista minua" }\nRun Code Online (Sandbox Code Playgroud)\n\n我已经为此集合创建了文本索引:
\n\ndb.tracks.createIndex({artistName: \'text\', title: \'text\', lyrics: \'text\'})\nRun Code Online (Sandbox Code Playgroud)\n\n但是当我尝试搜索曲目时,没有返回结果:
\n\nrs-ds047345:PRIMARY> db.tracks.find({$text: {$search: \'Tapani\'}}).size()\n0\nrs-ds047345:PRIMARY> db.tracks.find({$text: {$search: \'Rakkautemme valssi\'}}).size()\n0\nRun Code Online (Sandbox Code Playgroud)\n\n我无意中注意到,当我从搜索词的末尾裁剪一些字母时,我开始得到一些结果......所以全文搜索以某种方式起作用,只是不是以我想要和期望的方式。
\n\ndb.tracks.find({$text: {$search: \'Tapa\'}}).size()\n12\nrs-ds047345:PRIMARY> db.tracks.find({$text: {$search: \'Rakkaute\'}}).size()\n1\nRun Code Online (Sandbox Code Playgroud)\n\n有人可以告诉我,如何使用完整单词搜索数据库,或者我做错了什么?
\n\n我已经在 MongoDB 版本 3.0.8 和 3.2.1 上尝试过
\n所以,问题出在数据库中存储的文档中。我没有注意到它们包含一个名为 的字段language,该字段更改了全文搜索行为,尽管我尝试通过language: 'none'在索引和查询中设置来禁用词干提取。
当我将该language字段重命名为不同的名称时,全文搜索开始完全按照我的预期工作。