您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > Slor--Redis话术
Solr:是一种开放源码的、基于LuceneJava的搜索服务器,易于加入到Web应用程序中。Solr提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP的管理界面。可以使用Solr的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。Solr的特性:高级的全文搜索功能专为高通量的网络流量进行的优化基于开放接口(XML和HTTP)的标准综合的HTML管理界面可伸缩性-能够有效地复制到另外一个Solr搜索服务器使用XML配置达到灵活性和适配性可扩展的插件体系solr集群的优点(1)大数据量下更高的性能(2)更好扩展性(3)更高的可靠性(4)更简单易用Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括Solr:Solr是Lucene面向企业搜索应用的扩展。solr索引篇建立索引在solrj中创建索引的一般步骤:1)创建一个SolrServer对象,SolrServer用于管理索引2)创建SolrInputDocument对象,即文档对象,并且向文档对象添加字段3)利用SolrServer对象的add方法添加SolrInputDocument对象,创建索引删除索引删除索引可以通过两种方式操作,一种是通过文档ID进行删除,别一种是通过查询到的结果进行删除.通过ID删除方式代码:server.deleteById(id);//或是使用批量删除server.deleteById(ids);通过查询删除方式代码:server.deleteByQuery(*.*);//这样就删除了所有文档索引//”*.*”就查询所有内容的,介绍查询时会详细说明.优化索引优化Lucene的索引文件以改进搜索性能。索引完成后执行一下优化通常比较好。如果更新比较频繁,则应该在使用率较低的时候安排优化。一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。server.optimize();//不要频繁的调用..尽量在无人使用时调用.Solr存的什么数据类型?文本类型textfieldSolr高亮显示我们经常使用搜索引擎,比如在baidu搜索java,会出现如下结果,结果中与关键字匹配的地方是红色显示与其他内容区别开来。solr默认已经配置了highlight组件(详见SOLR_HOME/conf/sorlconfig.xml)。通常我出只需要这样请求=%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)。高亮内容与关键匹配的地方,默认将会被em和/em包围。还可以使用hl.simple.pre和hl.simple.post参数设置前后标签.分组统计我这里实现分组统计的方法是使用了Solr的Facet组件,Facet组件是Solr默认集成的一个组件.Facet简介Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够按照Facet的字段进行分组并统计Facet字段1.适宜被Facet的字段一般代表了实体的某种公共属性,如商品的分类,商品的制造厂家,书籍的出版商等等.2.Facet字段的要求Facet的字段必须被索引.一般来说该字段无需分词,无需存储.无需分词是因为该字段的值代表了一个整体概念,如电脑的品牌”联想”代表了一个整体概念,如果拆成”联”,”想”两个字都不具有实际意义.另外该字段的值无需进行大小写转换等处理,保持其原貌即可.无需存储是因为一般而言用户所关心的并不是该字段的具体值,而是作为对查询结果进行分组的一种手段,用户一般会沿着这个分组进一步深入搜索.3.特殊情况对于一般查询而言,分词和存储都是必要的.比如CPU类型”Intel酷睿2双核P7570”,拆分成”Intel”,”酷睿”,”P7570”这样一些关键字并分别索引,可能提供更好的搜索体验.但是如果将CPU作为Facet字段,最好不进行分词.这样就造成了矛盾,解决方法为,将CPU字段设置为不分词不存储,然后建立另外一个字段为它的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下创了个solrcloud的目录,然后把这个Zookeeper解压放进来并改名,也是为了咱们这个方便操作,然后对Zookeeper进行配置,每个Zookeeper目录下建个data目录,data下建立myid文件存储该机器的标识码,再然后把每个Zookeeper的conf目录下zoo_sample.cfg复制改名zoo.cfg,修改里边的一些配置,主要是data目录,客户端连接端口还有鸡群中节点信息:比如ip地址啦、投票和选举端口啦,接着就可以启动了),然后去按照需求装几个tomcat实例,并修改其端口号,解压solr,把solr.war拿到tomcat下,example下的日志有关的jar包也拿进去,启动解压。创建多个solrhome来存放solr服务器所有配置文件,把solrhome上传到Zookeeper上边,接着修改solr.xml,主要是ip和端口号,接着就可以修改tomcat里bin下的catalina.sh文件加入DzkHost指定zookeeper服务器地址,最后启动就行了。分片的话是在地址栏用命令做的。Solr为什么要分片减少单机请求数,降低单机负载,提高总负载减少单机的存储空间,提高总存空间。solr索引优化(一)服务端框架优化:加大shard也就是分片的数目,理论上shard越多,写入速度越快设置较大的索引flush触发条件,ramBufferSizeMB或者maxBufferedDocs写索引时,关闭副本,因为同步索引会大大降低写入速度监控GC,调整JVM参数如果FullGC频繁,加大JVM堆内存,如果用GC频繁,加大新生代的比例,如果使用的是CMS垃圾收集器,必要时,可以关闭survive区,避免survive区和Eden区来回拷贝尽量使用稳定的新版本如JDK和框架本身内存大的,可以尝试G1垃圾收集器(二)客户端优化(1)如果公司有大数据部门,可以使用Hadoop或者Spark分布式集群构建索引(2)如果公司没有大数据产品,可以使用多线程或者多进程并行构建索引(3)使用批量提交(4)减少commit次数,让服务端控制flush索引,索引完成之后,可手动commit一次。介绍solrCloudSolrCloud是基于Solr和Zookeeper的分布式搜索方案,是正在开发中的Solr4.0的核心组件之一,它的主要思想是使用Zookeeper作为集群的配置信息中心。它有几个特色功能,集中式的配置信息、自动容错、近实时搜索、查询时自动负载均衡。基本可以用上面这幅图来概述,这是一个拥有4个Solr节点的集群,索引分布在两个Shard里面,每个Shard包含两个Solr节点,一个是Leader节点,一个是Replica节点,此外集群中有一个负责维护集群状态信息的Overseer节点,它是一个总控制器。集群的所有状态信息都放在Zookeeper集群中统一维护。从图中还可以看到,任何一个节点都可以接收索引更新的请求,然后再将这个请求转发到文档所应该属于的那个Shard的Leader节点,Leader节点更新结束完成,最后将版本号和文档转发给同属于一个Shard的replicas节点。这里就不多说SolrCloud了,等研究明白后再单写一个文档。Solr加入中文分词器中文分词在solr里面是没有默认开启的,需要我们自己配置一个中文分词器。目前可用的分词器有smartcn,IK,Jeasy,庖丁。其实主要是两种,一种是基于中科院ICTCLAS的隐式马尔科夫HMM算法的中文分词器,如smartcn,ictclas4j,优点是分词准确度高,缺点是不能使用用户自定义词库;另一种是基于最大匹配的分词器,如IK,Jeasy,庖丁,优点是可以自定义词库,增加新词,缺点是分出来的垃圾词较多。各有优缺点看应用场合自己衡量选择吧。下面给出两种分词器的安装方法,任选其一即可,推荐第一种,因为smartcn就在solr发行包的contrib/analysis-extras/lucene-libs/下,就是lucene-analyzers-smartcn-4.2.0.jar,首选在solrconfig.xml中加一句引用analysis-extras的配置,这样我们自己加入的分词器才会引到的solr中.libdir=../../../contrib/analysis-extras/libregex=.*\.jar/smartcn分词器的安装首选将发行包的contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-4.2.0.jar复制到\solr\contrib\analysis-extras\lib下,在solr本地应用文件夹下,打开/solr/conf/scheme.xml,编辑text字段类型如下,添加以下代码到scheme.xml中的相应位置,就是找到fieldType定义的那一段,在下面多添加这一段就好啦fieldTypename=text_smartcnclass=solr.TextFieldpositionIncrementGap=0analyzertype=indextokenizerclass=org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory/filterclass=org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory//analyzeranalyzertype=querytokenizerclass=org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory/filterclass=org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory//analyzer/fieldType如果需要检索某个字段,还需要在scheme.xml下面的field中,添加指定的字段,用text_smartcn作为type的名字,来完成中文分词。如text要实现中文检索的话,就要做
本文标题:Slor--Redis话术
链接地址:https://www.777doc.com/doc-5528425 .html