Mongodb Mongo全文搜索没有';找不到
我正在尝试在我的Mongo数据库中实现全文搜索。这是一个音频曲目元数据数据库。我不想通过Mongodb Mongo全文搜索没有';找不到,mongodb,full-text-search,Mongodb,Full Text Search,我正在尝试在我的Mongo数据库中实现全文搜索。这是一个音频曲目元数据数据库。我不想通过曲目的艺人姓名和标题进行搜索。我在曲目集合中有这些记录(仅显示重要字段): 我已为此集合创建了文本索引: db.tracks.createIndex({artistName: 'text', title: 'text', lyrics: 'text'}) 但当我尝试搜索曲目时,没有返回任何结果: rs-ds047345:PRIMARY> db.tracks.find({$text: {$search:
曲目的艺人姓名
和标题
进行搜索。我在曲目
集合中有这些记录(仅显示重要字段):
我已为此集合创建了文本索引:
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上试过了-
对于不区分大小写和不区分重音的文本搜索
$text运算符与完整词干单词匹配。所以如果一份文件
字段包含blueberry一词,搜索blue一词不会
匹配。然而,蓝莓或蓝莓将匹配
我建议使用普通索引和正则表达式搜索
方括号将强制对regex进行索引扫描,而不是colscan
在3.0.6和3.2.3上测试时运气不佳:(所以,问题出在数据库中存储的文档中。我没有注意到它们包含一个名为language
的字段,该字段会改变全文搜索行为,尽管我试图通过在索引和查询中设置language:'none'
来禁用词干分析
当我将语言
字段重命名为另一个名称时,全文搜索开始完全按照我的预期工作。hmm,您尝试过按字段索引的方法吗?不,我没有……但是根据限制,每个集合只有一个文本索引,我需要为集合中的更多字段编制索引。可能是语言r兴高采烈?也许可以尝试将语言设置为“无”,看看是否有帮助。语言信息:我已经尝试了>db.tracks.find({$text:{$search:'Blueberry',$language:'none'})
但仍然没有结果。我还用默认语言“无”重新创建了索引,同样,没有区别。我将使用正则表达式搜索,以防没有其他方法,但我更喜欢使用全文搜索,因为它完全符合我的需要,应该很容易使用。但根据我的文档,它根本不起作用。。。我用标题:'blueberry'
标准查找>db.tracks.find({title:'blueberry'}).size()创建了一个新记录,返回1,但db.tracks.find({$text:{$search:'blueberry'})。size()
=>0 db.tracks.find({$text:{$search:{$search:'bluer'})。size()=>0db.tracks.createIndex({“artistName”:“text”,“title”:“text”,“歌词”:“text”},{default_language:“english”})这样的索引将允许搜索蓝莓和蓝莓。
db.tracks.find({$text: {$search: 'Tapa'}}).size()
12
rs-ds047345:PRIMARY> db.tracks.find({$text: {$search: 'Rakkaute'}}).size()
1
db.tracks.createIndex({"artistName": 1})
db.tracks.createIndex({ "title" : 1})
db.tracks.createIndex({ "lyrics": 1})
db.tracks.find({artistName:"/Tap/[0-10]"}).explain()