用 mongodb + elasticsearch 實現中文檢索

來源:互聯網
上載者:User

而 elasticsearch 可以很好的支援各種語言的全文檢索索引,但我們暫時又不想切換到 elasticsearch 作為後端資料庫。

當然,可以在 web 應用中儲存資料的時候,再主動寫一份到 elasticsearch,但這無疑汙染了原有的商務邏輯。

在 IT 行業,只要有需求的地方,必然早已有了一堆好用或者不好用的開源輪子。

幸運地是,現在已經有了一些轉換方案,可以將 mongodb 中的資料自動匯入到 elasticsearch 中,讓 elasticsearch 提供中文智能檢索。

轉換方案主要包括 river 和 mongo-connector。前者已經不再維護了,後者則得到了 mongo 官方的支援,因此選用它作為轉換方案。 mongo-connector

基於 python 編寫,安裝和使用都十分簡單。

$ pip install mongo-connector$ mongo-connector --auto-commit-interval=0 -m mongo:27017 -t elasticsearch:9200 -d elastic_doc_manager

auto-commit-interval 是提交延遲,0 表示即時寫入,-m 和 -t 分別指定 mongo 和 elasticsearch 地址即可。

需要注意的是,mongo 需要配置為 cluster 模式。 配置環境

使用者可以自行配置 mongo 和 elasticsearch 環境,並通過 mongo-connector 串連起來。

這裡已經提供好了 docker-compose 模板,可以使用 docker 容器一鍵建立包括 mongo、mongo-connector、elasticserach 的環境。需要提前安裝 Docker 和 docker-compose 環境。

$ git clone https://github.com/yeasy/docker-compose-files.git$ cd mongo-elasticsearch; docker-compose up

通過 docker inspect container_id |grep Addr 可以查看容器的 IP 位址。 測試

在 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"})

通過 elasticsearch 容器進行檢索

curl -XGET -H 'charset=UTF-8' elasticsearch:9200/test/col/_search -d '{ "query" : { "match" : { "name" : "王" } } }'{"took":74,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":2,"max_score":0.5,"hits":[{"_index":"test","_type":"col","_id":"55d6d4640e247e587cfc73ca","_score":0.5,"_source":{"name": "\u738b\u4e1c\u4e1c", "birth": "1981-01-01"}},{"_index":"test","_type":"col","_id":"55d6d45d0e247e587cfc73c9","_score":0.15342641,"_source":{"name": "\u738b\u6653\u660e", "birth": "1980-01-01"}}]}}

轉載請註明:http://blog.csdn.net/yeasy/article/details/47842437

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.