mongodb 3.2版本的文本搜索

来源:互联网 发布:如何在淘宝上买岛国片 编辑:程序博客网 时间:2024/05/22 15:32

本来还有一些内容想写的,但是主要是被这玩意给坑了一个早上了,觉得还是直接写出来比较好。

这里只是展示了文本搜索的方式,文本搜索更详细的内容之后会回来再更新这篇文章的。

首先,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()的那么详细了




0 0