SlorRedis话术_第1页
SlorRedis话术_第2页
SlorRedis话术_第3页
SlorRedis话术_第4页
SlorRedis话术_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Solr:是一种开放源码的、基于 LuceneJava的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。Solr的特性: 高级的全文搜索功能 专为高通量的网络流量进行的优化 基于开放接口(XML和HTTP)的标准 综合的HTML管理界面 可伸缩性能够有效地复制到另外一个Solr搜索服务器 使用XML配置达到灵活性和适配性 可扩展的插件体系solr

2、集群的优点(1)大数据量下更高的性能 (2)更好扩展性 (3)更高的可靠性 (4)更简单易用Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括 Solr: Solr是Lucene面向企业搜索应用的扩展。solr索引篇建立索引在solrj中创建索引的一般步骤: 1)创建一个SolrServer对象,SolrServer用于管理索引 2)创建SolrInputDocument对象,

3、即文档对象,并且向文档对象添加字段 3)利用SolrServer对象的add方法添加SolrInputDocument对象,创建索引删除索引 删除索引可以通过两种方式操作,一种是通过文档ID进行删除,别一种是通过查询到的结果进行删除.通过ID删除方式代码:server.deleteById(id);/或是使用批量删除server.deleteById(ids);通过查询删除方式代码:server.deleteByQuery(*.*);/这样就删除了所有文档索引/”*.*”就查询所有内容的,介绍查询时会详细说明.优化索引 优化Lucene 的索引文件以改进搜索性能。索引完成后执行一下优化通常比较

4、好。如果更新比较频繁,则应该在使用率较低的时候安排优化。一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。 server.optimize();/不要频繁的调用.尽量在无人使用时调用.Solr存的什么数据类型?文本类型textfieldSolr高亮显示 我们经常使用搜索引擎,比如在baidu 搜索 java ,会出现如下结果,结果中与关键字匹配的地方是红色显示与其他内容区别开来。solr 默认已经配置了highlight 组件(详见 SOLR_HOME/conf/sorlconfig.xml)。通常我出只需要这样请求http:/localhost:8983/solr/ collect

5、ion1 /select? q=%E4%B8%AD%E5%9B%BD&start=0&rows=1&fl=content+path+&wt=xml&indent=true&hl=true&hl.fl=content 可以看到与比一般的请求多了两个参数 hl=true 和 hl.fl= content 。hl=true 是开启高亮,hl.fl= content 是告诉solr 对 name 字段进行高亮(如果你想对多个字段进行高亮,可以继续添加字段,字段间用逗号隔开,如 hl.fl=name,name2,name3)。 高亮内容与关键匹配的地方,默认将会被 和 包围。还可以使用hl.simple

6、.pre 和 hl.simple.post参数设置前后标签.分组统计 我这里实现分组统计的方法是使用了Solr的Facet组件, Facet组件是Solr默认集成的一个组件.Facet简介 Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够按照Facet的字段进行分组并统计Facet字段1. 适宜被Facet的字段 一般代表了实体的某种公共属性,如商品的分类,商品的制造厂家,书籍的出版商等等.2. Facet字段的要求 Facet的字段必须被索引.一般来说该字段无需分词,无需存储. 无需分词是因为该字段的值代表了一个整体概念,如电脑的品牌”联想”代

7、表了一个整 体概念,如果拆成”联”,”想”两个字都不具有实际意义.另外该字段的值无需进行大小 写转换等处理,保持其原貌即可. 无需存储是因为一般而言用户所关心的并不是该字段的具体值,而是作为对查询结果进 行分组的一种手段,用户一般会沿着这个分组进一步深入搜索.3. 特殊情况 对于一般查询而言,分词和存储都是必要的.比如CPU类型”Intel 酷睿2双核 P7570”, 拆分成”Intel”,”酷睿”,”P7570”这样一些关键字并分别索引,可能提供更好的搜索 体验.但是如果将CPU作为Facet字段,最好不进行分词.这样就造成了矛盾,解决方法为, 将CPU字段设置为不分词不存储,然后建立另外一

8、个字段为它的COPY,对这个COPY的 字段进行分词和存储.Facet组件 Solr的默认requestHandler已经包含了Facet组件(solr.FacetComponent).如果自定义requestHandler或者对默认的requestHandler自定义组件列表,那么需要将Facet加入到组件列表中去.Facet查询 进行Facet查询需要在请求参数中加入facet=on或者facet=true只有这样Facet组件才起作用.solr集群怎么搭建的solrcloud是基于solr和Zookeeper的分布式搜索方案,先安装好Java和Zookeeper集群(我是在local下创

9、了个solrcloud的目录,然后把这个Zookeeper解压放进来并改名 ,也是为了咱们这个方便操作,然后对Zookeeper进行配置,每个Zookeeper目录下建个data目录,data下建立myid文件存储该机器的标识码,再然后把每个Zookeeper的conf目录下zoo_sample.cfg复制改名zoo.cfg,修改里边的一些配置,主要是data目录,客户端连接端口还有鸡群中节点信息:比如ip地址啦、投票和选举端口啦,接着就可以启动了),然后去按照需求装几个tomcat实例,并修改其端口号,解压solr,把solr.war拿到tomcat下,example下的日志有关的jar包也

10、拿进去,启动解压。创建多个solrhome来存放solr服务器所有配置文件,把solrhome上传到Zookeeper上边,接着修改solr.xml,主要是ip和端口号,接着就可以修改tomcat里bin下的catalina.sh文件加入DzkHost指定zookeeper服务器地址,最后启动就行了。分片的话是在地址栏用命令做的。Solr为什么要分片 减少单机请求数,降低单机负载,提高总负载减少单机的存储空间,提高总存空间。solr索引优化(一)服务端框架优化: 加大shard也就是分片的数目,理论上shard越多,写入速度越快设置较大的索引flush触发条件,ramBufferSizeMB

11、或者 maxBufferedDocs 写索引时,关闭副本,因为同步索引会大大降低写入速度 监控GC,调整JVM参数 如果Full GC频繁,加大JVM堆内存, 如果用 GC频繁,加大新生代的比例,如果使用的是CMS垃圾收集器,必要时,可以关闭survive区,避免survive区和Eden区来回拷贝 尽量使用稳定的新版本如JDK和框架本身 内存大的,可以尝试G1垃圾收集器 (二) 客户端优化 (1)如果公司有大数据部门,可以使用Hadoop或者Spark分布式集群构建索引 (2)如果公司没有大数据产品,可以使用多线程或者多进程并行构建索引 (3)使用批量提交 (4)减少commit次数,让服务

12、端控制flush索引,索引完成之后,可手动commit一次。介绍solrCloud SolrCloud是基于Solr和Zookeeper的分布式搜索方案,是正在开发中的Solr4.0的核心组件之一,它的主要思想是使用Zookeeper作为集群的配置信息中心。它有几个特色功能,集中式的配置信息、自动容错 、近实时搜索 、查询时自动负载均衡。基本可以用上面这幅图来概述,这是一个拥有4个Solr节点的集群,索引分布在两个Shard里面,每个Shard包含两个Solr节点,一个是Leader节点,一个是Replica节点,此外集群中有一个负责维护集群状态信息的Overseer节点,它是一个总控制器。集

13、群的所有状态信息都放在Zookeeper集群中统一维护。从图中还可以看到,任何一个节点都可以接收索引更新的请求,然后再将这个请求转发到文档所应该属于的那个Shard的Leader节点,Leader节点更新结束完成,最后将版本号和文档转发给同属于一个Shard的replicas节点。这里就不多说SolrCloud了,等研究明白后再单写一个文档。Solr加入中文分词器 中文分词在solr里面是没有默认开启的,需要我们自己配置一个中文分词器。目前可用的分词器有smartcn,IK,Jeasy,庖丁。其实主要是两种,一种是基于中科院ICTCLAS的隐式马尔科夫HMM算法的中文分词器,如smartcn,

14、ictclas4j,优点是分词准确度高,缺点是不能使用用户自定义词库;另一种是基于最大匹配的分词器,如IK ,Jeasy,庖丁,优点是可以自定义词库,增加新词,缺点是分出来的垃圾词较多。各有优缺点看应用场合自己衡量选择吧。 下面给出两种分词器的安装方法,任选其一即可,推荐第一种,因为smartcn就在solr发行包的contrib/analysis-extras/lucene-libs/下,就是lucene-analyzers-smartcn-4.2.0.jar,首选在solrconfig.xml中加一句引用analysis-extras的配置,这样我们自己加入的分词器才会引到的solr中.s

15、martcn 分词器的安装 首选将发行包的contrib/analysis-extras/lucene-libs/ lucene-analyzers-smartcn-4.2.0.jar复制到solrcontribanalysis-extraslib下,在solr本地应用文件夹下,打开/solr/conf/scheme.xml,编辑text字段类型如下,添加以下代码到scheme.xml中的相应位置,就是找到fieldType定义的那一段,在下面多添加这一段就好啦 如果需要检索某个字段,还需要在scheme.xml下面的field中,添加指定的字段,用text_ smartcn作为type的名字

16、,来完成中文分词。如 text要实现中文检索的话,就要做如下的配置:IK 分词器的安装首选要去下载IKAnalyzer的发行包.下载地址:http:/ik-下载后解压出来文件中的三个复制到solrcontribanalysis-extraslib目录中.IKAnalyzer2012FF_u1.jar 分词器jar包IKAnalyzer.cfg.xml 分词器配置文件Stopword.dic 分词器停词字典,可自定义添加内容复制后就可以像smartcn一样的进行配置scheme.xml了. 现在来验证下是否添加成功,首先使用StartSolrJetty来启动solr服务,启动过程中如果配置出错,

17、一般有两个原因:一是配置的分词器jar找不到,也就是你没有复制jar包到solrcontribanalysis-extraslib目前下;二是分词器版本不对导致的分词器接口API不一样出的错,要是这个错的话就在检查分词器的相关文档,看一下支持的版本是否一样. 如果在启动过程中没有报错的话说明配置成功了.我们可以进入到http:/localhost:8983/solr地址进行测试一下刚加入的中文分词器.在首页的Core Selector中选择你配置的Croe后点击下面的Analysis,在Analyse Fieldname / FieldType里选择你刚才设置的字段名称或是分词器类型,在Fie

18、ld Value(index)中输入:中国人,点击右面的分词就行了.Solr代码篇工具类1、 创建solrserver对象:try solr = new CommonsHttpSolrServer(http:/localhost:8983/solr); solr.setConnectionTimeout(100); solr.setDefaultMaxConnectionsPerHost(100); solr.setMaxTotalConnections(100); catch (Exception e) System.out.println(请检查tomcat服务器或端口是否开启!); e.

19、printStackTrace(); 2、 添加索引Collection docs = new ArrayList(); for (int i = 0; i list.size(); i+) Item item = list.get(i); /设置每个字段不得为空,可以在提交索引前进行检查 if (CheckItem(item) SolrInputDocument doc = new SolrInputDocument(); /在这里请注意date的格式,要进行适当的转化,上文已提到 doc.addField(id, item.getId(); docs.add(doc); try solr.

20、add(docs); /对索引进行优化 solr.optimize(); mit(); catch (Exception e) e.printStackTrace(); 3、 使用bean对象添加索引 创建一个对应于solr索引的类别: public class Item Field private String id; public void setId(String id) this.id = id; public String getId() return id; public Item() 使用数据创建bean对象列表, try solr.addBeans(beansList); ca

21、tch (Exception e) e.printStackTrace(); finally try solr.optimize(); mit(); catch (Exception e) e.printStackTrace(); 索引提交完毕。 4、 删除索引 据查询结果删除: try /删除所有的索引 solr.deleteByQuery(*:*); mit(); catch (Exception e) e.printStackTrace(); 根据索引号删除索引: try solr.deleteById(ids); mit(); catch (Exception e) e.printSt

22、ackTrace(); 5、 查询 SolrJ提供的查询功能比较强大,可以进行结果中查询、范围查询、排序等。 下面是笔者封装的一个查询函数: public static QueryResponse Search(String field, String key, int start, int count, String sortfield, Boolean flag, Boolean hightlight) /检测输入是否合法 if (null = field | null = key | field.length != key.length) return null; if (null =

23、sortfield | null = flag | sortfield.length != flag.length) return null; SolrQuery query = null; try /初始化查询对象 query = new SolrQuery(field0 + : + key0); for (int i = 0; i field.length; i+) query.addFilterQuery(fieldi + : + keyi); /设置起始位置与返回结果数 query.setStart(start); query.setRows(count); /设置排序 for(int

24、 i=0; isortfield.length; i+) if (flagi) query.addSortField(sortfieldi, SolrQuery.ORDER.asc); else query.addSortField(sortfieldi, SolrQuery.ORDER.desc); /设置高亮 if (null != hightlight) query.setHighlight(true); / 开启高亮组件 query.addHighlightField(title);/ 高亮字段 query.setHighlightSimplePre();/ 标记 query.setH

25、ighlightSimplePost(); query.setHighlightSnippets(1);/结果分片数,默认为1 query.setHighlightFragsize(1000);/每个分片的最大长度,默认为100 catch (Exception e) e.printStackTrace(); QueryResponse rsp = null; try rsp = solr.query(query); catch (Exception e) e.printStackTrace(); return null; /返回查询结果 return rsp; 补充一下范围查询的格式:sta

26、r t TO end,start与end是相应数据格式的值的字符串形式,“TO” 一定要保持大写! 6、 读取查询结果 DocList读取返回结果: SolrDocumentList solrList = rsp.getResults(); Beans读取返回结果: List tmpLists = rsp.getBeans(Item.class); 读取高亮显示结果: rsp = Search(field, key, 0, 10, sortfield, flag, true); if(null = rsp) return; MapString, MapString, List hightlig

27、ht = rsp.getHighlighting(); /Item即为上面定义的bean类 List tmpLists = rsp.getBeans(Item.class); for (int i = 0; i tmpLists.size(); i+) /hightlight的键为Item的id,值唯一,我们设置的高亮字段为title String hlString = hightlight.get(tmpLists.get(i).getId().get(title).toString(); if (null != hlString) System.out.println(hlString);

28、 7、 Facet的一个应用:自动补全 /prefix为前缀,min为最大返回结果数 public static String autoComplete(String prefix, int min) String words = null; StringBuffer sb = new StringBuffer(); SolrQuery query = new SolrQuery(*.*); QueryResponse rsp= new QueryResponse(); /Facet为solr中的层次分类查询 try query.setFacet(true); query.setQuery(*

29、:*); query.setFacetPrefix(prefix); query.addFacetField(title); rsp = solr.query(query); catch (Exception e) / TODO: handle exception e.printStackTrace(); return null; if(null != rsp) FacetField ff = rsp.getFacetField(title); List countList = ff.getValues(); if(null = countList) return null; for(int

30、i=0; icountList.size(); i+) String tmp = countList.get(i).toString().split( ); /排除单个字 if(tmp0.length() 本地(进行加工和处理)- 建立索引库(信息集合,一组文件的集合)2 搜索的时候从本地的(索引库)信息集合中搜索3 文本在建立索引和搜索时,都会先进行分词(使用分词器)4 索引的结构: 索引表(存放具体的词汇,哪些词汇再那些文档里存储,索引里存储的就是分词器分词之后的结果) 存放数据(文档信息集合)5 用户搜索时:首先经过分词器进行分词,然后去索引表里查找对应的词汇(利用倒排序索引),再找到对

31、应的文档集合6 索引库位置(Directory)7 信息集合里的每一条数据都是一个document(存储所有信息,他是一个Filed属性的集合)8 store 是否进行存储(可以不存储,也可以存储)9 index 是否进行存储(可以不索引,也可以索引,索引的话分为 分词后索引,或者直接索引)/* solr安装与使用 */Solr下载地址:/dist/lucene/solr/安装Solr与Tomcat集成:Linux环境CentOS6.4、Tomcat7.0、Solr4.10.3安装步骤:解压Solr:tar -zxvf solr-4.10.3.t

32、gz.tar进入目录:cd solr-4.10.3/example/webapps/拷贝其下war文件到tomcat的webapps中:cp solr.war /usr/local/apache-tomcat-7.0.29/webapps/解压Solr:mkdir solr & unzip solr.war -d solr & rm -rf solr.war修改解压好的solr文件夹,修改其文件:vim solr/WEB-INF/web.xml,查找到env-entry内容,解开注释文本。并修改solr/home的地址:/usr/local/solr-4.10.3/example/solr。保

33、存并退出即可。拷贝相关jar包到tomcat下:cd /usr/local/solr-4.10.3/example/lib/ext & cp * /usr/local/apache-tomcat-7.0.29/lib/启动tomcat即可:/usr/local/apache-tomcat-7.0.29/bin/startup.sh查看日志:tail -500 /usr/local/apache-tomcat-7.0.29/logs/catalina.out通过浏览器访问:http:/地址:8080/solr,看到solr主页即可。/* 中文分词器安装 */无论是Solr还是lucene,都对中

34、文分词不支持,所以我们一般索引中文的话需要使用IK中文分词器。下载:IK Analyzer 2012FF_hf1.zip 进行解压:安装:把IKAnalyzer2012FF_u1.jar拷贝到tomcat的solr应用服务下:cd /usr/local/software & cp IKAnalyzer2012FF_u1.jar /usr/local/apache-tomcat-7.0.29/webapps/solr/WEB-INF/lib/创建文件夹:/usr/local/apache-tomcat-7.0.29/webapps/solr/WEB-INF/classes把IKAnalyzer.

35、cfg.xml和stopword.dic拷贝到新创建的classes目录下即可。修改solr core的schema文件,默认是位置:vim /usr/local/solr-4.10.3/example/solr/collection1/conf/schema.xml添加如下配置: solr全量更新第一步:创建数据库solr,然后建立一张表 test,插入几条数据即可(见docs下的solr.sql文件,创建solr数据库、表、倒入数据)第二步:/usr/local/solr-4.10.3/example/solr/collection1/conf/solrconfig.xml对这个文件进行编辑:命令:vim /usr/local/solr-4.10.3/example/solr/collection1/conf/s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论