mongoDB 全文搜索 TextSearch

snowball(默认分词器)只有在Mongodb 3.2之后的企业版中才开始加入了对中文的支持,之前或者社区的版本在建立全文索引时会自动过滤中文字符。
在Mongodb 3.2企业版中,对中文建立全文索引后,默认使用的是与英文同样的分词规则,即以空格与符号作为词与词之间分隔的界限。
所以,当使用“福尔摩斯”作为搜索词时,无法搜索到“福尔摩斯探案全集”,只能搜索到类似“福尔摩斯(1)”之类的结果

问题-方案

1.产品需要全文检索,数据库是使用的MongoDB,MongoDB的全文检索太慢,打算使用ElasticSearch
2.方案1:利用 ElasticSearch 的 River 来同步数据,

在github上有MongoDB River的插件:https://github.com/richardwilly98/elasticsearch-river-mongodb。 
可以看到使用的版本很旧,原因是官方已经在 1.5 以后的版本弃用 River,为了用户的迁移,会一直保留到 2.0 版本。所以这个方案的可行性比较低,但是是可以使用的。

3.方案2:利用mongo-connector,

https://github.com/mongodb-labs/mongo-connector。 
这个是 MongoDB 官方的开发人员用 Python 写的一个工具,目前支持将 MongoDB 的数据同步到 Solr、ElasticSearch、MongoDB 中,并且支持用户自己扩展。

实际(方案2)

一.安装Elasticsearch并配置

0.MongoDB必须开启复制集
    配置复制集的名称:mongod --replSet myDevReplSet
    在 mongo shell 中初始化复制集:rs.initiate()
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
1.下载Elasticsearch,安装java
    rpm -i xxx
    sudo service elasticsearch start
    出现问题,找不到java home,google发现需要在
    /etc/sysconfig/elasticsearch中添加JAVA_HOME=/icksys/jdk1.8.0_72/jre
    重新启动服务,works
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
2.配置mongo-connector
    先安装pip:
    yum install python-setuptools && easy_install pip
    通过pip安装mongo-connector
    pip install mongo-connector
3.运行mongo-connector
    mongo-connector -m 127.0.0.1:27017 -t 127.0.0.1:9200 -d elastic_doc_manager
 
 
  • 1
  • 2
  • 1
  • 2

二.测试

在mongo容器中写入测试数据

use test
 db.col.insert({name:"王明", birth:"1980-01-01"})
 db.col.insert({name:"王东", birth:"1981-01-01"})
 db.col.insert({name:"张敏", birth:"1982-01-01"})
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

通过 elasticsearch 容器进行检索

curl -XGET -H 'charset=UTF-8' 127.0.0.1:9200/test/col/_search -d '{ "query" : { "match" : { "name" : "" } } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值