您的位置:首页 > 其它

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

{

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐