mongodb处理中文索引与查找字符串详解
参考文献
首先自打3.2版本之后,就开始支持中文索引了,支持的所有的语言参考这里:
https://docs.mongodb.com/manual/reference/text-search-languages/
然后,对于要支持索引的表需要建议textindex,如何建立参考这里:
https://docs.mongodb.com/manual/core/index-text/
在建好索引text之后,如果检索参考:
https://docs.mongodb.com/manual/reference/operator/query/text/
实例
我有一个表,定义如下:
varArticleSchema=newSchema({ created:{ type:Date, default:Date.now }, title:{ type:String, default:'', trim:true, required:'Titlecannotbeblank' }, abstract:{ type:String, default:'', trim:true }, abstractImg:{ type:String, default:'http://www.doocr.com/modules/core/client/img/brand/font-ocr.png', trim:true }, content:{ type:String, default:'', trim:true }, category:{ type:String, default:'news', trim:true }, user:{ type:Schema.ObjectId, ref:'User' }, toPublish:{ type:Boolean, default:true }, comments:[CommentSchema] });
然后,里面有数据的,所以我直接检索,得到结果:
>db.articles.find({$text:{$search:"coffee"}}) Error:error:{ "waitedMS":NumberLong(0), "ok":0, "errmsg":"textindexrequiredfor$textquery", "code":27 }
说明没有建议text索引,那么建一个:
db.articles.createIndex({title:"text",content:"text"})
看看效果:
>db.articles.createIndex( ...{ ...title:"text", ...content:"text" ...} ...)
下面是结果,成功了
{ "createdCollectionAutomatically":false, "numIndexesBefore":1, "numIndexesAfter":2, "ok":1 }
然后我开始检索:
>db.articles.find({$text:{$search:"coffee"}})
什么都没有。
我检索一个存在的中文:
>db.articles.find({$text:{$search:"操作"}}) {"_id":ObjectId("58b0eb5a136dc51b541eaf81"),"user":ObjectId("589c8d22f7d9dc15989be255"),"comments":[],"toPublish":true,"category":"blog","content":"
其实就是使用ubuntu16的安装方式,参考网址:
https://docs.mongodb.com/master/tutorial/install-mongodb-on-ubuntu/
我的操作步骤:
1.倒入key:sudoapt-keyadv--keyserverhkp://keyserver.ubuntu.com:80--recvEA312927
2.创建mongodb的软件源:
/etc/apt/sources.list.d/mongodb-org-3.2.list
操作:
echo"debhttp://repo.mongodb.org/apt/ubuntuxenial/mongodb-org/3.2multiverse"|sudotee/etc/apt/sources.list.d/mongodb-org-3.2.list
3.更新系统:
sudoaptupdate
之后查看所有可以更新的软件:
sudoaptlist--upgradable
然后升级所有软件:
sudoaptupgrade
4.安装mongodb:
sudoaptinstall-ymongodb-org
也可以指定版本安装:
sudoapt-getinstall-ymongodb-org=3.2.8mongodb-org-server=3.2.8mongodb-org-shell=3.2.8mongodb-org-mongos=3.2.8mongodb-org-tools=3.2.8
不过我不使用这种方式。
5.添加systemd自启动条目:
sudovim/lib/systemd/system/mongod.service
添加内容:
[Unit]
Description=High-performance,schema-freedocument-orienteddatabase
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod--quiet--config/etc/mongod.conf
[Install]
WantedBy=multi-user.target
6.使能和启动服务:
sudosystemctlenablemongod.service
sudosystemctlstartmongod.service
查看状态,一切ok。
sudosystemctlstatusmongod.service
●mongod.service-High-performance,schema-freedocument-orienteddatabase
Loaded:loaded(/lib/systemd/system/mongod.service;enabled;vendorpreset:enabled)
Active:active(running)sinceSun2016-07-3121:59:00CST;13minago
Docs:https://docs.mongodb.org/manual
MainPID:19374(mongod)
CGroup:/system.slice/mongod.service
└─19374/usr/bin/mongod--quiet--config/etc/mongod.conf
Jul3121:59:00mintsystemd[1]:StartedHigh-performance,schema-freedocument-orienteddatabase.
7.查看服务启动端口是否ok:
azuo1228@mint~/webproj/mjs2/meanjs$netstat-apn|grepmong
(Notallprocessescouldbeidentified,non-ownedprocessinfo
willnotbeshown,youwouldhavetoberoottoseeitall.)
unix2[ACC]STREAMLISTENING76731-/tmp/mongodb-27017.sock
","abstractImg":"http://www.doocr.com/modules/core/client/img/brand/font-ocr.png","abstract":"其实就是使用ubuntu16的安装方式,参考网址:","title":"其实就是使用ubuntu16的安装方式,参考网址:","created":ISODate("2017-02-25T02:26:34.483Z"),"__v":0} >
最后
但是这种检索都是不完美的,如果需要更好的支持,就需要参考:
https://docs.mongodb.com/manual/tutorial/text-search-with-rlp/
安装rlp支持mongodb检索中文,但是不是免费的。。。
所以,最好的方式就是使用ElasticSearch同步mongodb,然后通过它检索,超出本文范围了,以后再说。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。