Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongo全文搜索没有';找不到_Mongodb_Full Text Search - Fatal编程技术网

Mongodb 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:

我正在尝试在我的Mongo数据库中实现全文搜索。这是一个音频曲目元数据数据库。我不想通过
曲目的
艺人姓名
标题
进行搜索。我在
曲目
集合中有这些记录(仅显示重要字段):

我已为此集合创建了文本索引:

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()