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" : "" } } }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章