mongoDB 全文搜索 TextSearch
2017-05-04 17:27
651 查看
snowball(默认分词器)只有在Mongodb
3.2之后的企业版中才开始加入了对中文的支持,之前或者社区的版本在建立全文索引时会自动过滤中文字符。
在Mongodb 3.2企业版中,对中文建立全文索引后,默认使用的是与英文同样的分词规则,即以空格与符号作为词与词之间分隔的界限。
所以,当使用“福尔摩斯”作为搜索词时,无法搜索到“福尔摩斯探案全集”,只能搜索到类似“福尔摩斯(1)”之类的结果
在github上有MongoDB River的插件:https://github.com/richardwilly98/elasticsearch-river-mongodb。
可以看到使用的版本很旧,原因是官方已经在 1.5 以后的版本弃用 River,为了用户的迁移,会一直保留到 2.0 版本。所以这个方案的可行性比较低,但是是可以使用的。
https://github.com/mongodb-labs/mongo-connector。
这个是 MongoDB 官方的开发人员用 Python 写的一个工具,目前支持将 MongoDB 的数据同步到 Solr、ElasticSearch、MongoDB 中,并且支持用户自己扩展。
2
3
1
2
3
2
3
4
5
6
1
2
3
4
5
6
2
1
2
在mongo容器中写入测试数据
2
3
4
1
2
3
4
通过 elasticsearch 容器进行检索
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 重新启动服务,works1
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_manager1
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" : "王" } } }
相关文章推荐
- Linq实践系列(1):一行代码实现DataTable全文搜索(Full Text Search)
- Linq实践教程(1):一行代码实现DataTable全文搜索(Full Text Search)
- 使用DB2 Text Search进行全文本搜索pdf
- MongoDB学习之Text Search文本搜索功能
- 如何为Postgresql数据库全文搜索(full text search)编写解析器(parser)
- flask入门的教程-全文搜索 Full Text Search
- [教程]MongoDB 从入门到进阶 (TextSearch)
- mongodb 全文搜索---ttlsa教程系列之mongodb(十)
- Spring Data Elasticsearch加Elasticsearch服务实现全文搜索
- mongodb全文搜索解决方案(lucene+IKAnalyzer)
- MYSQ LFULLTEXT索引实现全文搜索
- 基于whoosh的flask全文搜索插件flask-msearch
- 实战:Nodejs+Mongodb+Elasticsearch 实现简单的搜索
- eclipse安装quick text search插件,全文搜索
- mongodb fulltextsearch 关于语言的设置选项
- ES的多种搜索机制:query string search,query DSL,query filter,full-text search,phrase search,highlight search
- eclipse全局搜索报错问题problems encountered during text search
- 全文检索(Full-Text Search)与XML
- PostgreSQL chinese full text search 中文全文检索
- 分享:MongoDB 核心将支持全文搜索功能 (2.3.2)