Mongo全文搜索没有找到

时间:2016-03-02 16:20:56

标签: mongodb full-text-search

我正在尝试在Mongo数据库中实现全文搜索。它是音轨元数据的数据库。我不想通过artistName的{​​{1}}和title进行搜索。我在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'})

我不小心注意到,当我从搜索到的单词的末尾剪下一些字母时,我开始得到一些结果......所以全文搜索在某种程度上起作用,只是没有我希望和期望的方式。 / p>

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

有人可以告诉我,如何使用完整的单词搜索数据库,或者我做错了什么?

我在MongoDB版本3.0.8和3.2.1

上尝试过

2 个答案:

答案 0 :(得分:1)

根据规范 -

  

对于不区分大小写和变音符号不敏感的文本搜索,   $ text运算符匹配完整的词干。所以,如果一个文件   字段包含蓝莓这个词,对蓝色一词的搜索不会   比赛。但是,蓝莓或蓝莓会匹配。

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

  
 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上测试没有运气:(

答案 1 :(得分:1)

所以,问题在于存储在数据库中的文档。我没有注意到它们包含一个名为function HideColumn() { var el = document.getElementById('columntarget'); el.className += 'hideColumn'; }的字段,它会更改全文搜索行为,尽管我尝试通过在索引和查询中设置.hideColumn > div { width: 0px; overflow: hidden; transition: all 2s step-end; } td, div { width: 50px; padding: 0px; } .hideColumn { width: 0px; transition: all 2s step-end; } table { border-collapse: collapse; table-layout: fixed; }来禁用词干。

当我将<table style="width:500px;" border=1> <tr> <td> <div style='background-color:red;'>column 1</div> </td> <td style='width:auto'> <div style='background-color:blue;'>column 3</div> </td> <td id="columntarget"> <div style='background-color:yellow;'>column 2</div> </td> </tr> </table> <button onclick='HideColumn()'>Hide </button>字段重命名为其他名称时,全文搜索开始完全符合我的预期。