manifoldcf同步索引数据到ES
2017-12-13 09:39
190 查看
背景和目标:
关系型数据库对于文本型数据处理乏力,一般以长varchar,CLOG,BLOG字段存储,或者把文本内容放在文件系统中,然后在字段中存{path.txt}的路径。除了varchar格式的可以用find,replace等函数进行操作(速度很慢,行数多基本没可操作性),基本只能把文本当做一个黑盒,不能处理。
把涉及到文本的数据索引到搜索引擎数据库中,是最常用的方式,既能够通过RDBMS达到ACID和方便管理的特性,又能够通过搜索引擎库实现文本的搜索分析等深入文本的功能。但是如何同步两者也是个麻烦事儿,Apache的一个小的项目 ManifoldCF就是做这个事情的,这个项目存在已经多年,2012年就有关注到,但至今一直没有停止发展,版本更新至今比较稳定。
ManifoldCF简介:
就是一个从源同步数据到目的地的中间件,Repository就是数据源,基本上涵盖了市面上常见的,不常见的涉及文档的数据源,从JDBC到各种cms系统,企业文档关系系统,一应俱全,输出端也是,各种搜索引擎数据库,ES,solr。提供一个配置界面,可以通过UI设置输入源和输出源。
定时任务,定时扫描源数据放入队列(用的数据库),发送到输出目的,标记是否成功。整个过程并不复杂,但是还是有很多细节比较坑。这次数据源是oracle,目的是ES,但是manifoldcf的ES支持只到1.3。
1.自带的Derby库非常慢,非常非常慢,现在支持postgresql和mysql作为队列存储库
2.正文的字段,是要用tika解析之后以base64编码串发送过去的,而ES的mapper-attachment插件,刚好与此对应,但是在发送数据之前,还是要先设置好索引的schema,就是mapping,而对于中文,还存在一个问题,要改默认的analyzer,不然中文正文没有分词,啥作用也没有。
3. add index.analysis.analyzer.default.type: keyword in your elasticsearch.yml ,网上很多不知道是不靠谱还是对不上这个版本,总之这个是管用的,我装的是smartcn这个分词插件,另外也不用注册,这个插件安装后自己就注册为smartcn的analyzer了,配置文件中只需要加此一句。
4.看默认的analyzer可以用 http://localhost:9200/test/_analyze?text=按资管产品类型统一标准规制,看分词的结果,如果是默认的是会分成字的
5.搜索用http://localhost:9200/test/attachment/_search?q=file._content:按资管产品类型统一标准规制
6.设置的mapping为http://localhost:9201/test/attachment/_mapping
关系型数据库对于文本型数据处理乏力,一般以长varchar,CLOG,BLOG字段存储,或者把文本内容放在文件系统中,然后在字段中存{path.txt}的路径。除了varchar格式的可以用find,replace等函数进行操作(速度很慢,行数多基本没可操作性),基本只能把文本当做一个黑盒,不能处理。
把涉及到文本的数据索引到搜索引擎数据库中,是最常用的方式,既能够通过RDBMS达到ACID和方便管理的特性,又能够通过搜索引擎库实现文本的搜索分析等深入文本的功能。但是如何同步两者也是个麻烦事儿,Apache的一个小的项目 ManifoldCF就是做这个事情的,这个项目存在已经多年,2012年就有关注到,但至今一直没有停止发展,版本更新至今比较稳定。
ManifoldCF简介:
就是一个从源同步数据到目的地的中间件,Repository就是数据源,基本上涵盖了市面上常见的,不常见的涉及文档的数据源,从JDBC到各种cms系统,企业文档关系系统,一应俱全,输出端也是,各种搜索引擎数据库,ES,solr。提供一个配置界面,可以通过UI设置输入源和输出源。
定时任务,定时扫描源数据放入队列(用的数据库),发送到输出目的,标记是否成功。整个过程并不复杂,但是还是有很多细节比较坑。这次数据源是oracle,目的是ES,但是manifoldcf的ES支持只到1.3。
1.自带的Derby库非常慢,非常非常慢,现在支持postgresql和mysql作为队列存储库
2.正文的字段,是要用tika解析之后以base64编码串发送过去的,而ES的mapper-attachment插件,刚好与此对应,但是在发送数据之前,还是要先设置好索引的schema,就是mapping,而对于中文,还存在一个问题,要改默认的analyzer,不然中文正文没有分词,啥作用也没有。
3. add index.analysis.analyzer.default.type: keyword in your elasticsearch.yml ,网上很多不知道是不靠谱还是对不上这个版本,总之这个是管用的,我装的是smartcn这个分词插件,另外也不用注册,这个插件安装后自己就注册为smartcn的analyzer了,配置文件中只需要加此一句。
4.看默认的analyzer可以用 http://localhost:9200/test/_analyze?text=按资管产品类型统一标准规制,看分词的结果,如果是默认的是会分成字的
5.搜索用http://localhost:9200/test/attachment/_search?q=file._content:按资管产品类型统一标准规制
6.设置的mapping为http://localhost:9201/test/attachment/_mapping
{ "attachment": { "properties": { "allow_token_document": { "type": "string" }, "allow_token_parent": { "type": "string" }, "allow_token_share": { "type": "string" }, "deny_token_document": { "type": "string" }, "deny_token_parent": { "type": "string" }, "deny_token_share": { "type": "string" }, "file": { "properties": { "_content": { "type": "attachment" }, "_content_type": { "type": "string" }, "_name": { "type": "string" } } } } } }
相关文章推荐
- python实现MongoDB数据同步到ES(Elasticsearch)
- Solr(搜索引擎服务)和MongoDB通过mongodb-connector进行数据同步的解决方案,以及遇到的各种坑的总结(针对solr-5.3.x版本),mongodb和solr实现实时增量索引
- 测试使用-批量往es索引中添加数据,es的使用小结。
- 测试使用-批量往es索引中添加数据,es的使用小结。
- Solr索引数据同步ReplicationHandler
- 测试使用-批量往es索引中添加数据,es的使用小结。
- 测试使用-批量往es索引中添加数据,es的使用小结。
- ES-MongoDB学习3_MongoDB数据同步到Elasticsearch中
- ES Java API - 获取索引下数据量
- MYSQL 常识系统回顾和整理【建表、索引、数据同步、高效查询、排错原则】
- ES Java API - 获取索引历史更新数据
- Elasticsearch中的索引数据Index同步到Mongodb中的集合collection中
- 测试使用-批量往es索引中添加数据,es的使用小结。
- [请教]SQL2005复制功能同步Oracle数据后,索引丢失?
- es 建索引时指定分片数据和副本数
- 测试使用-批量往es索引中添加数据,es的使用小结。
- Elasticsearch之重要核心概念(cluster(集群)、shards(分配)、replicas(索引副本)、recovery(据恢复或叫数据重新分布)、gateway(es索引的持久化存储方式)、discovery.zen(es的自动发现节点机制机制)、Transport(内部节点或集群与客户端的交互方式)、settings(修改索引库默认配置)和mappings)
- 测试使用-批量往es索引中添加数据,es的使用小结。
- 测试使用-批量往es索引中添加数据,es的使用小结。
- 一种基于主键索引和缓存机制的大数据表同步方法