为了能在MongoDB中用日语进行全文搜索,需要安装ElasticSearch
MongoDB中的全文搜索
我想在MongoDB中用日语进行全文搜索!但很遗憾,这还不被支持。※2015年10月
参考网址
因此,我们将使用ElasticSearch插件(MongoDB River + Kuromoji Analysis)。
通过ElasticSearch插件,我们可以从MongoDB进行全文搜索。
为此,我遇到了各种问题,因此我将以备忘录的形式写下来。
以下是所需的物品。
-
- mongodb
-
- JDK (Java Development Kit)
-
- ElasticSearch
MongoDB River Plugin (プラグイン)(mongodbの接続用)
Kuromoji Analysis Plugin (プラグイン)(日本語形態素解析)
环境是 CentOS 6.6 64bit 版本。
只要在MongoDB中能够进行日语搜索,这些东西就不再需要多次说。
安装MongoDB
创建/etc/yum.repos.d/mongodb.repo并添加存储库。
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
我要安装MongoDB。
sudo yum install mongodb-org
启动MongoDB
sudo yum service mongod start
安装JDK
sudo yum install java-1.7.0-openjdk
问题出在这里。
决定 ElasticSearch 的版本
我认为,目前MongoDB的版本可能是2.6.8左右,所以大家可以根据这个考虑自己的选择。
本次使用的版本。
安装时请注意,如果不考虑版本问题,可能会出现无法运行的情况。虽然可能只是一些次要版本的差异,但并不能保证能够正常运行。
您可以选择忽略这些问题,但如果这样做的话,最好将版本降到最低。
然而,我要再次强调的是,如果在mongodb中可以进行日语搜索,那么就不需要这些东西了。
安装ElasticSearch 1.3.x
创建一个/etc/yum.repos.d/elasticsearch.repo文件并添加仓库。
[elasticsearch-1.3.x]
name=Elasticsearch repository for 1.3.x packages
baseurl=http://packages.elasticsearch.org/elasticsearch/1.3/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
安装ElasticSearch
sudo yum install elasticsearch
暂时启动
sudo service elasticsearch
确认启动。
curl -XGET 'localhost:9200'
{
"status" : 200,
"name" : "Zeitgeist",
"version" : {
"number" : "1.3.9",
"build_hash" : "0915c7306e6264ba21a6cb7609b93545ccc32ef1",
"build_timestamp" : "2015-02-19T12:34:48Z",
"build_snapshot" : false,
"lucene_version" : "4.9"
},
"tagline" : "You Know, for Search"
}
安装MongoDB River插件2.0.2
sudo /usr/share/elasticsearch/bin/plugin --install com.github.richardwilly98.elasticsearch/elasticsearch-river-mongodb/2.0.2
安装Kuromoji分析插件2.3.0。
安装
sudo /usr/share/elasticsearch/bin/plugin --install elasticsearch/elasticsearch-analysis-kuromoji/2.3.0
编辑/etc/elasticsearch/elasticsearch.yml
index.analysis.analyzer.default.type: custom # 追加
index.analysis.analyzer.default.tokenizer: kuromoji_tokenizer # 追加
弹性搜索的重新启动
sudo service elasticsearch restart
嗯,我再说一遍,如果在MongoDB中可以进行日语搜索的话(省略部分)。
使用MongoDB构建副本集
复制套装是什么?
复制集是一种功能,用于在多个MongoDB之间进行数据同步和服务器冗余。类似于MySQL的复制功能。虽然需要执行MongoDB River插件,但不需要准备副本。
我要编辑etc/mongod.conf文件。
sudo vi /etc/mongod.conf
replSet = rs01 # 最後に追記
在MongoDB中设置副本集
sudo service mongod restart
在mongod控制台中执行。
mongo
config = {_id: 'rs01', members: [{_id: 0, host: 'localhost:27017'}]};
rs.initiate(config);
试着在MongoDB中创建数据
在ElasticSearch中创建索引。
curl -XPUT 'http://localhost:9200/_river/mongodb/_meta' -d '{
"type": "mongodb",
"mongodb": {
"db": "testmongo",
"collection": "animal"
},
"index": {
"name": "mongoindex",
"type": "animal"
}
}'
用MongoDB创建数据
mongo
use testmongo
var p = {name:"キツネ"}
db.animal.save(p)
确认动作
需要将日语搜索词从UTF编码转换为URL编码。
在以下网站中转换后,”狐”是 %e3%82%ad%e3%83%84%e3%83%8d。
URL编码/解码表单
尝试用日语进行搜索
curl -XGET 'http://localhost:9200/mongoindex/_search?q=name:%e3%82%ad%e3%83%84%e3%83%8d&pretty'
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.30685282,
"hits" : [ {
"_index" : "mongoindex",
"_type" : "animal",
"_id" : "55116bc107a66baa7b209026",
"_score" : 0.30685282,
"_source":{"_id":"55116bc107a66baa7b209026","name":"キツネ"}
} ]
}
}
因为难以读取,所以将pretty参数放在最后一项。
结束
现在可以在mongodb中进行全文搜索了…辛苦了(´ω`;)
如果想要在已有的mongodb数据中进行日语搜索,请在创建ElasticSearch索引时,将db、collection和type进行匹配。
当你不清楚ElasticSearch的索引时,你可以使用以下命令curl -XDELETE ‘http://localhost:9200/*’删除所有索引。
发生了错误
如果不考虑版本安装,会发生错误。
由于以下原因导致错误:java.lang.ClassNotFoundException: org.elasticsearch.index.analysis.kuromojitokenizer.KuromojiTokenizerTokenizerFactory
在java.net.URLClassLoader$1.run(URLClassLoader.java:366)处发生错误
在java.net.URLClassLoader$1.run(URLClassLoader.java:355)处发生错误
在java.security.AccessController.doPrivileged(Native Method)处进行了访问控制
在java.net.URLClassLoader.findClass(URLClassLoader.java:354)中找不到类
在ClassLoader.java:425中加载类
在sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)中加载类
在ClassLoader.java:358中加载类
在org.elasticsearch.common.settings.ImmutableSettings.loadClass(ImmutableSettings.java:469)中加载类
… 共计 18 个错误
由于甚至无法接受删除索引命令,我们就手动删除数据吧。
请删除/var/lib/elasticsearch目录:sudo rm -r /var/lib/elasticsearch。
希望有一天能够在MongoDB上进行日语搜索(´ω`)b
请提供网址参考
http://cohakim.com/archives/5367
该链接是关于elasticsearch-river-mongodb的文章。
https://github.com/richardwilly98/elasticsearch-river-mongodb
这个链接是elasticsearch-river-mongodb的GitHub页面。
https://github.com/elastic/elasticsearch-analysis-kuromoji
这个链接是elasticsearch-analysis-kuromoji的GitHub页面。
顺便说一下,亚马逊弹性搜索服务已经上线了。