博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用 mongodb + elasticsearch 实现中文检索
阅读量:6867 次
发布时间:2019-06-26

本文共 1718 字,大约阅读时间需要 5 分钟。

hot3.png

而 elasticsearch 可以很好的支持各种语言的全文检索,但我们暂时又不想切换到 elasticsearch 作为后端数据库。

当然,可以在 web 应用中存储数据的时候,再主动写一份到 elasticsearch,但这无疑污染了原有的业务逻辑。

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

幸运地是,现在已经有了一些转换方案,可以将 mongodb 中的数据自动导入到 elasticsearch 中,让 elasticsearch 提供中文智能检索。

转换方案主要包括 river 和 。前者已经不再维护了,后者则得到了 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"}}]}}

 

转载于:https://my.oschina.net/liuyuantao/blog/746202

你可能感兴趣的文章
学习CAS实现SSO单点登录
查看>>
同步异步的知识补充
查看>>
Linux下通过PXE服务器安装Linux系统
查看>>
rstrip,strip,lstrip字符串内置函数
查看>>
linux安装mysql
查看>>
jQuery验证控件jquery.validate.js使用说明+中文API
查看>>
剑指offer——面试题7:重建二叉树
查看>>
剑指offer——面试题18:删除链表的节点
查看>>
SubLime Text 3 配置SublimeREPL来交互式调试程序
查看>>
C++ cin相关函数总结
查看>>
2018/11/11蓝桥杯Java培训
查看>>
2018/12/08 L1-042 日期格式化 Java
查看>>
java输出数组中出现的次数最多的那个及次数
查看>>
Unicode和UTF-8的关系
查看>>
入门HTML的回顾,小总结
查看>>
[Leetcode]100. Same Tree -David_Lin
查看>>
阿里云推送服务
查看>>
工作中遇到的懒加载问题
查看>>
lbp纹理特征
查看>>
elastic的gc相关
查看>>