本来还有一些内容想写的,但是主要是被这玩意给坑了一个早上了,觉得还是直接写出来比较好。
这里只是展示了文本搜索的方式,文本搜索更详细的内容之后会回来再更新这篇文章的。
首先,mongodb支持文本搜索,但是很不幸的消息就是不支持中文我下的是3.2.8,也不支持,默哀
但是这不是最坑的部分,还有比他更坑的,接下来会看到的。
首先使用shell开启文本搜索
db.adminCommand(
{setParameter:1,
textSearchEnabled:true})
接着就是针对字段创建文本索引了,下面先插入几组数据来做例子比较好
data1={
'message':'hello world',
'name':'yang'
}
data2={
'message':'hello world again',
'name':'qing'
}
data3={
'message':'hello yang',
'name':'xian'
}
data4={
'message':'hello qing',
'name':'guo'
}
db.blog.save(data4)
db.blog.save(data3)
db.blog.save(data2)
db.blog.save(data1)
接着就是针对'message'字段创建文本索引了
db.blog.ensureIndex(
{'message':'text'})
注意格式,{'message':'text'}中的'message'表示针对'message'字段创建索引,'text'表示创建的是文本索引
接下来可以使用
db.blog.getIndexes()
查看索引信息,如果出现这样的内容,表示索引创建成功了
重点是下面部分,至于'default_language':'french'是不小心被我玩坏了的,默认应该是english,可以在创建索引时指定
db.blog.ensureIndex(
{message:'text'},
{default_language:'french'}
)
接下来就是坑了我一早上的东西了,就是运行了如下命令
提示:no such command 'text'
然后就花了一个早上在搜解决方案,最终还是翻墙出去从谷歌上搜到了结果,text命令在不知道哪个的版本之后就被删除了
现在如果想要使用文本搜索可以使用如下形式
db.blog.find({
$text:{$search:'hello'}
})
可以看到从原来的runCommand()变成了find()函数,而且像$search一样的操作符还有如下这些
{
$text:{
$search:<String>,
$language:<String>,
$caseSensitive:<boolean>,
$diacriticSensitive:<boolean>}
}
一个一个来,$search表示搜索的文档内容,$language表示搜索文档时采用的语言,$caseSensitive,顾名思义,大小写敏感,即是否区分大小写,最后一个不用管,是发音。。。。。。。
上面的搜索结果如下
可以看到返回结果是标准的执行find()之后的结果,没有使用runCommand()的那么详细了