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,然后通过它检索,超出本文范围了,以后再说。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。