为了能在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左右,所以大家可以根据这个考虑自己的选择。

本次使用的版本。

mongodbElasticSearchKuromoji Analysis PluginMongoDB River Plugin2.6.81.3.92.3.02.0.2

安装时请注意,如果不考虑版本问题,可能会出现无法运行的情况。虽然可能只是一些次要版本的差异,但并不能保证能够正常运行。
您可以选择忽略这些问题,但如果这样做的话,最好将版本降到最低。
然而,我要再次强调的是,如果在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页面。

顺便说一下,亚马逊弹性搜索服务已经上线了。

bannerAds