已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Cloudera Search使用手册一、 Cloudera Search简介1.1. 什么是Cloudera SearchCloudera Search作为Cloudera CDH(Clouderas Distribution, including Apache Hadoop)产品的一个重要组成部分,基于Apache Solr开源项目进行构建,其使用了Lucene、SolrCloud、Apache Tika、Solr Cell等相关技术。Cloudera Search提供近实时(Near-Real-Time)数据访问服务,允许非技术人员通过简单的全文搜索接口,实现快速查询、浏览存储在Hadoop和Hase上的数据,而不需要掌握SQL、编程技能就可以使用。1.2. Solr Cloud的基础概念n Collection在SolrCloud集群中逻辑意义上的完整的索引。它常常被划分为一个或多个Shard,它们使用相同的Config Set。如果Shard数超过一个,它就是分布式索引,SolrCloud让你通过Collection名称引用它,而不需要关心分布式检索时需要使用的和Shard相关参数。n Config SetSolr Core提供服务必须的一组配置文件。每个config set有一个名字。最小需要包括solrconfig.xml (SolrConfigXml)和schema.xml (SchemaXml),除此之外,依据这两个文件的配置内容,可能还需要包含其它文件。它存储在Zookeeper中。Config sets可以重新上传或者使用upconfig命令更新,使用Solr的启动参数bootstrap_confdir指定可以初始化或更新它。n CoreCore也就是Solr Core,一个Solr中包含一个或者多个Solr Core,每个Solr Core可以独立提供索引和查询功能,每个Solr Core对应一个索引或者Collection的Shard,Solr Core的提出是为了增加管理灵活性和共用资源。在SolrCloud中有个不同点是它使用的配置是在Zookeeper中的,传统的Solr core的配置文件是在磁盘上的配置目录中。n Leader赢得选举的Shard replicas。每个Shard有多个Replicas,这几个Replicas需要选举来确定一个Leader。选举可以发生在任何时间,但是通常他们仅在某个Solr实例发生故障时才会触发。当索引documents时,SolrCloud会传递它们到此Shard对应的leader,leader再分发它们到全部Shard的replicas。n ReplicaShard的一个拷贝。每个Replica存在于Solr的一个Core中。一个命名为“test”的collection以numShards=1创建,并且指定replicationFactor设置为2,这会产生2个replicas,也就是对应会有2个Core,每个在不同的机器或者Solr实例。一个会被命名为test_shard1_replica1,另一个命名为test_shard1_replica2。它们中的一个会被选举为Leader。n ShardCollection的逻辑分片。每个Shard被化成一个或者多个replicas,通过选举确定哪个是Leader。二、 Cloudera Search安装Cloudera Search作为CDH的一个组件,统一采用Cloudera Manager进行安装及配置,具体内容参加CDH的安装说明文档,本文以具体配置使用为主。三、 Solr配置使用3.1. 简单示例采用SSH或者Telnet远程连接到服务器上,在控制台依次执行下来命令,完成Solr的集合创建以及数据加入处理。创建solr配置目录(执行后会在当前目录生产oa_solr目录)#solrctl instancedir -generate oa_solr基于solr配置,创建Core#solrctl instancedir -create oa oa_solr创建集合#solrctl collection -create article -s 2 -c oa向集合中加入测试数据#cd /opt/cloudera/parcels/CDH/share/doc/solr-doc*/example/exampledocs#java -Durl=http:/localhost:8983/solr/article/update -jar post.jar *.xml在浏览器中输入17:8983/solr/进入Solr配置管理界面。在左侧导航栏中选择Core,点击“Query”菜单,点击“Execute Query”,如出现数据,则完成最基本的查询功能。3.2. 整合中文分词Solr默认没有中文分词处理,需要进行添加配置,本示例采用IK Analyer进行中文分词配置。3.2.1. 下载IK AnalyerIK Analyer最新的程序版本为IK Analyzer 2012FF_hf1.zip,可以从官方网站下进行获取/archive/p/ik-analyzer/downloads下载。3.2.2. 复制依赖文件将IKAnalyzer2012FF_u1.jar拷贝到/opt/cloudera/parcels/CDH/lib/solr/webapps/solr/WEB-INF/lib目录中。备注:不要拷贝到文件拷贝到/var/lib/solr/tomcat-deployment/webapps/solr/WEB-INF/lib,该目录重启后,会自动消失,同时所有solr的服务器均需要拷贝。将IKAnalyzer.cfg.xml、stopword.dic 拷贝到3.1.简单示例中创建配置目录oa_solr的conf子目录中。3.2.3. 修改配置文件编辑conf/schema.xml配置文件,在types标签内增加 在fields标签内将需要进行中文切除的字段修改为text_cn3.2.4. 启用配置因涉及到依赖jar文件的变化,需要在Cloudera Manager中重启Solr服务。同时采用以下命令更新配置,并重建集合。#solrctl instancedir -update oa oa_solr#solrctl collection -delete article#solrctl collection -create article -s 2 -c oa3.2.5. 中文分词验证进入solr管理控制台,在左侧导航栏选择“Analysis”,在“Analyse Fieldname / FieldType”中选择“text_cn”,并在Field Value中输入中文,点击“Analyse Values”按钮,如出现多个中文,则表示分词成功。3.2.6. IK配置自定义词组在“3.2.2. 复制依赖文件”复制配置文件后,修改IK的配置文件IKAnalyzer.cfg.xml,增加ext.dic; 并创建一个ext.dic的文本文件(无BOM头的UTF-8格式),以rn作为每一行的结束,同时将ext.dic放到conf目录下。备注:自定义词库在实际环境中未测试通过,具体原因不明,目前的做法是将IKAnalyzer2012FF_u1.jar中的默认字典配置文件(org/wltea/analyzer/dic/main2012.dic)解压出来,修改后,重新还原到jar文件中。3.3. Schema配置集合(Collection)内所有存储的字段均需要预先在Schema中予以定义声明,Schema对应的配置文件为conf/schema.xml。fieldType用于定义数据格式类型,字段类型定义包括三种方式field、copyField、dynamicField。n Field Field就是一个字段,定义示例如下:其中:name为字段名称,type对应fieldType,indexed是否为索引列,stored表示数据是否存储,multiValued表示是否多个值。备注:solr本身不支持对象关联查询,对于同一个collection不会正常区分,所有的内容均会拉平存储在同一对象中,因此子对象的字段名称需要与父对象进行区分,如果存在一对多的情况,多方的multiValued值必须设置为true。n copyField solr提供了字段复制机制,可以提交多个不同字段的内容集中到一个字段。字段复制主要涉及两个概念,source和destination,一个是要复制的字段,另一个是要复制到哪个字段,以下是个例子:n dynamicField 动态字段(Dynamic fields)允许 solr 索引没有在 schema 中明确定义的字段。这个在忘记定义一些字段时很有用。动态字段可以让系统更灵活,通用性更强。以下为CMS中文章Collection的Schema定义片段。 3.4. 数据导入配置数据导入相关说明参见以下两个链接的说明。/solr/DataImportHandler/confluence/display/solr/Uploading+Structured+Data+Store+Data+with+the+Data+Import+Handler3.4.1. 复制依赖文件拷贝dataimport依赖包以及jdbc驱动到/opt/cloudera/parcels/CDH/lib/solr/webapps/solr/WEB-INF/lib中。#cp /opt/cloudera/parcels/CDH/lib/solr/solr-dataimport*-cdh5.5.2.jar /opt/cloudera/parcels/CDH/lib/solr/webapps/solr/WEB-INF/lib#cp db2jcc4.jar /opt/cloudera/parcels/CDH/lib/solr/webapps/solr/WEB-INF/lib备注:DB2必须是jdbc4的驱动,否则将会报错;因涉及到jar文件的变动,需要重启solr服务。3.4.2. 启动DIH配置修改conf/solrconfig.xml文件,增加以下配置: dih-config.xml 3.4.3. 定义数据初始化文件新增dih-config.xml文件,文件内容如下: / $dataimporter.last_index_time or RELEASE_SYS_DATE $dataimporter.last_index_time transformer=ClobTransformer 注意transformer=ClobTransformer和clob=true的写法。3.4.4. 启用配置#solrctl instancedir -update oa oa_solr3.4.5. 通过界面导入数据进入Solr管理控制台,在左侧导航栏点击“Dataimport”菜单,点击右侧“Congfiguration”查看配置内容是否一致,如果不一致,点击“Reload”连接,进行配置刷新。点击“Execute”,启动数据导入,点击“Refresh Status”按钮,查看导入进度情况。最后的导入结果如下:导入58万的数据量,耗时14分39秒,每秒导入数据670条。3.4.6 通过URL导入数据全部更新17:8983/solr/article/dataimport?command=full-import增量更新17:8983/solr/article/dataimport?command=delta-import查看执行状态17:8983/solr/article/dataimport?command=status3.5. 默认排序处理在solrconfig.xml中加入 explicit 10 on title,content 200 edismax rord(releaseSysDate) content title1.9 bf用函数计算某个字段的权重,bf内字段必须是索引的,bf的函数的使用参考文档:/solr/FunctionQuery。pf查询字段,这样在schema不用制定默认字段qf对默认查询增加权重比值,比如标题是content的1.9倍,值越大权重越大四、 Java调用示例4.1. 添加依赖 org.apache.solr solr-solrj 5.2.1 commons-logging commons-logging 1.24.2. 连接服务器private static final String COLLECTION = article;private CloudSolrClient solr = null;public SolrDemoApp() / 通过zooKeeper实现自动负载均衡 String zkHostString = 15:2181,16:2181,17:2181/solr; solr = new CloudSolrClient(zkHostString); / 设置默认的集合 solr.setDefaultCollection(COLLECTION); / 连接服务器 solr.connect();/ 执行完成后调用public void close() throws IOException solr.close();4.3. 增加文档public void add() throws IOException, SolrServerException / 更新索引 SolrInputDocument document = new SolrInputDocument(); document.addField(id, TEST_DOC_ID); document.addField(title, 中华人民共和国); document.addField(content, 湖北烟草); document.addField(releaseDate, new Date(); solr.add(COLLECTION, document); mit(); SolrQuery query = new SolrQuery(); query.setQuery(id: + TEST_DOC_ID); QueryResponse result = solr.query(COLLECTION, query); output(result);4.4. 删除文档public void delete() throws IOException, SolrServerException / 删除索引 solr.deleteById(COLLECTION, TEST_DOC_ID); mit(); SolrQuery query = new SolrQuery(); query.setQuery( id:123lmz); QueryResponse result = solr.query(COLLECTION, query); if (result.getResults().size() = 0) System.out.print(删除成功); else System.out.print(删除失败); 4.5. 高亮查询public void query() throws IOException, SolrServerException SolrQuery query = new SolrQuery(); query.setQuery( websiteId:8ac4932e2a370de2012a372b98ba0001 & ( content:赵全意 | title:赵全意 ); setQueryParams(query); QueryResponse result = solr.query(COLLECTION, query); output(result);private void setQueryParams(SolrQuery query) query.setFields(id, title, content, releaseDate); query.setRows(20).setStart(0); query.setHighlight(true).setHighlightFragsize(200) .setHighlightSimplePre().setHighlightSimplePost() .set(hl.fl, title,content);private void output(QueryResponse result) SolrDocumentList list = result.getResults(); MapString, MapString, List hlMap = result.getHighlighting(); for (SolrDocument doc : list) output(doc, hlMap); private void output(SolrDocument doc, MapString, MapString, List hlMap) String id = (String) doc.getFieldValue(id); String title = (String) doc.getFieldValue(title); String content = (String) doc.getFieldValue(content); if (hlMap != null) MapString, List docHl = hlMap.get(id); if (docHl != null) title = getHlValue(docHl, title); content = getHlValue(docHl, content); System.out.print(id: + id); System.out.print(ttitle: + title); System.out.print(tcontent: + content); System.out.println(tdate: + DateUtils.formatDate(Date) doc.getFieldValue(releaseDate), yyyy-MM-dd HH:mm);private String getHlValue(MapString, List docHl, String field) return docHl.containsKey(field) ? docHl.get(field).get(0) : null;4.6. Facet查询/ /solr/SimpleFacetParameterspublic void facetQuery() throws IOException, SolrServerException SolrQuery query = new SolrQuery(); query.setQuery(websiteId:8ac4932e2a370de2012a372b98ba0001); / 启动facet query.setFacet(true); / 以栏目为统计 query.set(facet.field, channelId); / 按照时间统计 query.set(facet.date, releaseDate); query.set(facet.date.start, 2009-1-1T0:0:0Z); query.set(facet.date.end, 2016-1-1T0:0:0Z); query.set(facet.date.gap, +1YEAR); query.set(fa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年预防接种理论知识竞赛考试题库(完整版)
- 26年新定版四年级上册语文写字表生字课课贴-空白版
- 中医资格试题及答案03
- 【AI赋能课件】23. 《司马光》
- C类证易错试题及答案分析
- 2026广东韶关市消防救援支队政府专职消防员招聘75人(第三批次)考试备考题库及答案详解
- 2026广西平果金通投资集团有限公司公开招聘4人笔试备考题库及答案详解
- 2026年8月西南医科大学附属医院招聘工作人员考试备考试题及答案详解
- 2026永州市公安局招聘警务辅助人员65人笔试备考题库及答案详解
- 2026首都医科大学附属北京地坛医院第三批招聘22人笔试备考试题及答案详解
- 2026年下半年中小学教师资格考试综合素质(中学)笔试真题及答案
- IEC TR 62595-1-62025 显示器照明装置 第1-6部分用于背光装置的量子点薄膜和量子点扩散板标准立项发展报告
- 2026太仓市城市发展集团有限公司第一批公开招聘6人考试参考题库及答案详解
- 天津市河东区2025-2026学年九年级上学期12月月考英语试题(含答案)
- 2026年秋季开学小学收心归位习惯养成教育课件
- 2026年山东将军开元纸业有限公司招聘(13人)笔试模拟试题及答案详解
- DEK印刷机-操作-编程-保养
- 2026陕西水务发展集团综合能源管理有限公司招聘笔试模拟试题及答案详解
- 国有企业董事会决策事项清单管理制度
- 2026年安徽(高考)化学考试试卷真题(含答案)
- 泡菜制作实验
评论
0/150
提交评论