




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、 solr、lucene简单介绍1.1 luceneLucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序, 而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个 开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。 目前已经有很多应用程序的搜索功能是基于 Lucene ,比如 Eclipse 帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索。1.2 solrSolr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的 Java 来实现。服务 器通信使用标准的 HTTP 和 XML ,所以如果使用Solr 了解 Java 技术会有用却不是必须的要求。 Solr主要特性有:强大的全文检索功能,高亮显示检索结果,动态集群,数据库接口和 电子文档(Word ,PDF 等)的处理。而且 Solr具有高度的可扩展,支持分布搜索和索引的复制。1.3 solr与lucene比较Solr 与 Lucene 并不是竞争对立关系,恰恰相反 Solr 依存于 Lucene,因为Solr 底层 的核心技术是使用 Apache Lucene 来实现的,简单的说 Solr 是 Lucene 的服务器化。1.4 常用资源solr中文网:/solr共享资源:/share/link?shareid=181778&uk=352829242#dir/path=%2Fwww.solr.cc%E5%85%B1%E4%BA%AB%E8%B5%84%E6%BA%90solr wiki:/solrsolr自动补齐,树结构:/rush/archive/2012/12/30/2839996.html其他文章:/blog/1361.html /yeshenrenjin/article/details/8570048 /developerworks/cn/java/j-solr1/ /developerworks/cn/java/j-solr2/ /category/program/solr/lucene的FST相关介绍/s/blog_4d58e3c001016b7t.html二、 安装配置2.1 安装前的准备1)jdk1.6+ 2)ant1.8.2+ / path配置%ANT_HOME%bin3)下载solr2.2 solr程序包的目录结构 contrib :存放爱好者贡献的代码。 dist :存放Solr 构建完成的 JAR 文件、WAR 文件和 Solr 依赖的 JAR 文件。 example :是一个安装好的Jetty 中间件,其中包括一些样本数据和 Solr 的配置信息。 example/etc :Jetty 的配置文件。 example/multicore :当安装Slor multicore 时,用来放置多个 Solr 主目录。 example/example-DIH :可以作为solr的主目录,里面包含多个索引库,以及hsqldb的数据,里面有连接数据库的配置示例,以及邮件、rss的配置示例。 example/solr :默认安装时一个Solr 的主目录。 example/webapps :Solr 的 WAR 文件部署在这里。 docs:Solr 的文档。 2.3 solr 主目录的目录结构一个运行的 Solr 服务其主目录包含了 Solr 的配置文件和数据(Lucene 的索引文件) Solr 的主目录展开后为如下结构: bin :建议将集群复制脚本放在这个目录下。 collection1 :solr的example默认的一个索引库 collection1/conf :放置配置文件。 collection1/conf/schema.xml :建立索引的 schema 包含了字段类型定义和其相关的分析器。 collection1/conf/solrconfig.xml :这个是Solr 主要的配置文件。 collection1/conf/xslt :包含了很多xslt 文件,这些文件能将 Solr 的 XML 的查询结果转换为特定的格式,比如:Atom/RSS 。 data :放置 Lucene 产生的索引数据。2.4 solr简易安装1)把下载下来的solr解压2)打开命令提示符(开始运行cmd回车),cd到apache-solr-4.0.0文件夹下的example文件夹3)输入命令:java -jar start.jar4)打开浏览器输入网址:http:/localhost:8983/solr/就可以浏览到solr的主页了5)往solr添加数据:打开一个新的命令提示符,cd到apache-solr-4.0.0文件夹下的example文件夹下的exampledocs文件夹,输入命令:java -jar post.jar -h(帮助命令,可以查看post.jar的执行参数) 执行完毕后再输入:java -jar post.jar *.xml这时查看solr默认的索引库collection1就能看到增加了新的索引文档6)尝试查询数据:打开浏览器输入网址:http:/localhost:8983/solr/collection1/browse在Find:输入窗口输入:apple 按提交按钮即可搜索到有关apple的信息。2.5 solr+Tomcat部署1)将E:toolssolr-4.1.0distsolr-4.1.0.war拷贝到Tomcat的webapp目录下2)solr.solr.home的配置:主要有两种l 基于环境变量solr.solr.home在当前用户的环境变量中(.bash_profile)或在/opt/tomcat/catalina.bat中添加如下环境变量export JAVA_OPTS=$JAVA_OPTS -Dsolr.solr.home=/opt/solr-tomcat/solr 评价:此种方法侵入性太大,需要直接修改TOMCAT启动脚本,因此不建议使用l 基于JNDI配置在tomcat的文件夹下增加solr.xml文件,位置如下tomcat/conf/Catalina/localhost/solr.xml ,内容如下: 评价:此种方法侵入性小,无需修改启动脚本,只需在TOMCAT程序目录的conf/Catalina/localhost下新建一个solr.xml文件即可3)配置好solr.solr.home之后,直接启动即可2.6 solr+IKAnalyzer分词1)下载IK文件包 地址:/p/ik-analyzer/2)解压,将其中的jar文件放到之前部署的Tomcat的solr 文件夹下位置如下:tomcatwebappssolrWEB-INFlib3)修改配置文件solr/collection1/conf/中的schema.xmlsolr分词器配置/solr/AnalyzersTokenizersTokenFilters2.7 solr使用log4j1)将WEB_INFlib下的slf相关的jar包删除即将slf4j-jdk-1.7.2.jar删除,增加log4j的jar2)在src文件夹下增加perties增加相应配置即可。但是log4j没有实现logWatch,是的solr主页面logging面板无法设置。三、 solr+eclipse调试环境搭建3.1 源码编译导入1) 在官网下载对应源码,解压2) 使用ant进行编译为eclipse工程,耗时比较长 (ant要求ant1.8.2+ 地址:/)3) 导入eclipse就可以调试了4) 在源码中新建一个WebContent文件夹,复制solr-4.1.0-srcsolrwebappweb 下的内容至WebContent;复制solr-4.1.0-src solrexample中的solr文件夹复制到 WebContent中,作为solr/home5) jetty中新建 jetty webapp,设置参数如下在Arguments面板中的VM arguments中增加 -Dsolr.solr.home=WebContent/solr6) 启动jetty即可。3.2 solr+jetty嵌入式部署启动1)找到StartSolrJetty类,修改配置如:2)直接RUN AS-JAVA Application即可。3.3 新建空白工程1) 在eclipse中新建一个空白的web 工程2) 将WebContent中的内容全部删除,将solr-4.1.0.war解压,解压出来的文件全部复制到WebContent文件夹中;复制solr-4.1.0-srcsolrexample下的solr 文件夹复制到WebContent中,作为solr/home3) 同上小节中的5)设置,启动jetty即可。3.4 连接数据库导入数据1)在默认主目录的solrconfig.xml中没有配置DataImportHandler,增加这个配置就可以直接连接数据库导入数据。具体参考:/solr/DataImportHandler配置如下: data-config.xml 2)conf文件夹下新建data-config.xml文件,配置dataSource,配置如下: 3)修改相应schema.xml,字段与data-config.xml中的字段配置一致,fields块配置如下: 4)启动jetty这是collection1就能够出现dataImport面板。勾选commit,execute执行即可。四、 solr配置文件4.1 solr.xmlsolr中文wiki地址:/solr/doku.php 不过只翻译了部分文档主要是配置solr主目录中的索引库即SolrCore一个solr服务可以配置多个SolrCore,即可以管理多个索引库。4.2 solr MultiCore个人理解就是多个索引库,索引库的索引数据可以相互切换。具体参考:/solr/CoreAdmin4.3 solrconfig.xmlsolr系统相关配置声明使用的lucene的版本。配置solr用到的jar包,具体语法示例中基本都有了。如果不用 “Solr home”/data 目录,可以指定其它别的目录来存放所有索引数据。如果使用了 replication,它可以匹配 replication 配置。如果这个目录不是绝对的,那会是当前 servlet 容器工作目录下的相对目录。索引文件的类型,默认solr.NRTCachingDirectoryFactory这个文件类型包装了solr.StandardDirectoryFactory和小文件内存缓存的类型,来提供NRT搜索性能。NRT-near-real-time近实时。主要索引相关配置IndexWriter写锁过时的时间,默认1000最大索引的线程数,默认8是否使用混合文件,Lucene默认是“true”,solr默认是“false”使用的内存的大小,默认100,这个实际用的时候应该修改大一点。内存中最大的文档数,默认1000索引合并的策略。默认TiereMergePolicy,合并大小相似的段,与LogByteSizeMergePolicy相似。这个可以合并不相邻的段,能够设置一次合并多少个段,maxMergeAtOnce以及每层能合并多少个段segmentsPerTier。每次合并索引的时候获取多少个段,默认10。等同于同时设置了maxMergeAtOnce和segmentsPerTier两个参数。段合并器,背后有一个线程负责合并,默认ConcurrentMergeScheduler。文件锁的类型,默认native,使用NativeFSLockFactory。默认falseLucene每次加载到内存的terms数,默认128如果是true时,IndexReaders能够被reopened,而不是先关闭再打开,默认true删除策略,用户可以自己定制,solr默认的是SolrDeletionPolicy,是solr标准的删除策略,允许在一定时间内保存索引提交点,来支持索引复制,以及快照等特性。可以设置“maxCommitsToKeep”保存提交的数量、“maxOptimizedCommitsToKeep”保存的优化条件的数量、“maxCommitAge”删除所有commit points的时间。为了调试,Lucene提供了这个参数,如果是true的话,IndexWriter会像设置的文件中写入debug信息。一般不需要设置具体可以查看wiki文档/solr/SolrJmx更新的Handler,默认DirectUpdateHandler2配置更新日志的存放位置硬自动提交,可以配置maxDocs即从上次提交后达到多少文档后会触发自动提交;maxTime时间限制;openSearcher,如果设为false,导致索引变化的最新提交,不需要重新打开searcher就能看到这些变化,默认false。如自动提交,与前面的相似,但是它只是让这些变化能够看到,并不保证这些变化会同步到磁盘上。这种方法比硬提交要快,而且更接近实时更友好。update时间监听器配置,postCommit每一次提交或优化命令后触发,poatOptimize每次优化命令后触发。RunExecutableListener每次调用后执行一些其他操作。配置项:这个配置项用户可以自己扩展IndexReaderFactory,可以自己实现自己的IndexReader。如果要明确声明使用的Factory则可以如下配置:配置检索词相关参数以及缓存配置参数。每个BooleanQuery中最大Boolean Clauses的数目,默认1024。为IndexSearcher使用,当一个IndexSearcher Open时,可以被重新赋于原来的值,或者使用旧的IndexSearcher的值,例如使用LRUCache时,最近被访问的Items将被赋予IndexSearcher。solr默认是FastLRUCache 。cache介绍:/phinecos/article/details/7876385u filterCachefilterCache存储了无序的lucene documentid集合,该cache有3种用途:1)filterCache存储了filterqueries(“fq”参数)得到的document id集合结果。Solr中的query参数有两种,即q和fq。如果fq存在,Solr是先查询fq(因为fq可以多个,所以多个fq查询是个取结果交集的过程),之后将fq结果和q结果取并。在这一过程中,filterCache就是key为单个fq(类型为Query),value为document id集合(类型为DocSet)的cache。对于fq为range query来说,filterCache表现出其有价值的一面。2)filterCache还可用于facet查询(/solr/SolrFacetingOverview),facet查询中各facet的计数是通过对满足query条件的documentid集合(可涉及到filterCache)的处理得到的。因为统计各facet计数可能会涉及到所有的doc id,所以filterCache的大小需要能容下索引的文档数。3)如果solfconfig.xml中配置了,那么如果查询有filter(此filter是一需要过滤的DocSet,而不是fq,我未见得它有什么用),则使用filterCache。 缓存查询的结果集的docs的id。 缓存document对象,因为document中的内部id是transient,所以autowarmed为0,不能被autowarmed。字段缓存用户自定义一个cache,用来缓存指定的内容,可以用来缓存常用的数据,或者系统级的数据,可以通过SolrIndexSearcher.getCache(),cacheLookup(), and cacheInsert().等方法来操作。保存的字段,如果不需要的话就懒加载,默认true。一般来讲用不到,只有当你频繁的重复同一个搜索,并且使用不同的排序,而且它们都不用“score”queryResultCache的一个参数。 queryResultCache的一个参数。query的事件监听器。当一个检索请求到达时,如果现在没有注册的searcher,那么直接注册正在预热的searcher并使用它。如果设为false则所有请求都要block,直到有searcher完成预热。后台同步预热的searchers数量。solr接受请求后如何处理,推荐新手使用false使系统能够接收远程流http cache参数,solr不输出任何HTTP Caching相关的头信息。接收请求,根据名称分发到不同的handler。/select检索SearchHandler /query检索SearchHandler /get RealTimeGetHandler /browse SearcherHandler /update UpdateRequestHandler/update/json JsonUpdateRequestHandler/update/csv CSVRequestHandler/update/extract ExtractingRequestHandler/analysis/field FieldAnalysisRequestHandler/analysis/document DocumentAnalysisRequestHandler/admin/ AdminHandlers/replication 复制,要有主,有从注册searchComponent。spellcheck 拼写检查返回数据默认的搜索词4.4 schema.xml solr索引相关配置4.4.1 块声明一系列的字段name:名称type:类型从 的fieldType中取indexed:是否索引stored:是否保存required:是否必须multiValuer:在同一篇文档中可以有多个值omitNorms:true的话忽略normstermVectors:默认false,如果是true的话,要保存字段的term vectortermPositions:保存term vector的位置信息termOffects:保存term vector的偏移信息default:字段的默认值动态字段,当不确定字段名称时采用这种配置4.4.2 块 块内,声明一系列的 ,以 Solr fieldtype类为基础,如同默认选项一样来配置自己的类型。任何FieldType的子类都可以作为 field type 来使用,使用时可以用完整的包名,如果field type 类在 solr 里,那可以用 “solr”代替包名。提供多种不同实现的普通数据类型(integer, float等)。想知道怎么样被 Solr 正确地加载自定义的数据类型,请看:SolrPlugins通用的选项有:name:类型名称class:对应于solr fieldtype类sortMissingLast=true|false 如果设置为true,那么对这个字段排序的时候,包含该字段的文档就排到不包含该字段的文档前面。sortMissingFirst=true|false 如果设置为true,那么对这个字段排序的时候,没有该字段的文档排在包含该字段的文档前面precisionStep 如何理解precisionStep呢?需要一步一步来:参考文档:/fancyerii/article/details/72563791, precisionStep是在做range search的起作用的,默认值是42, 数值类型(int float double)在Lucene里都是以string形式存储的,当然这个string是经过编码的3,经过编码后的string保证是顺序的,也就是说num1num2,那么strNum1strNum24,precisionStep用来分解编码后的string,例如有一个precisionStep,默认是4,也就是隔4位索引一个前缀,比如0100,0011,0001,1010会被分成下列的二进制位“0100,0011,0001,1010“,”0100,0011,0001“,0100,0011“,”0100“。这个值越大,那么索引就越小,那么范围查询的性能(尤其是细粒度的范围查询)也越差;这个值越小,索引就越大,那么性能越差。positionIncrementGap和multiValued一起使用,设置多个值之间的虚拟空白的数量。字段有多个值时使用,如果一篇文档有两个title title1: ab cd title2: xy zz如果positionIncrementGap=0,那么这四个term的位置为0,1,2,3。如果检索cd xy那么能够找到,如果你不想让它找到,那么就需要调整positionIncrementGap值。如100,那么这是位置为0,1,100,101。这样就不能匹配了。这个字段类型可以实现伪随机排序。analyzer配置包括tokenizer和filter,可以配置多个filter4.4.3 其他配置唯一字段,除非这个字段标记了“required=false”,否则默认为required字段一个源字段一个目的字段,将源字段的内容拷贝到目的字段,可以将多个字段合并,也可以对同一个字段,不同索引方式。默认的搜索字段默认的检索词间的关系五、 solr源码5.1 SolrDispatchFilter-过滤器系统启动时首先运行SolrDispatchFilter.init()方法,该方法要加载CoreContainer的Initializer类,配置文件默认solr.xml所有的请求都要经过的Filter5.2 SolrResourceLoader-加载配置文件5.3 CoreContainer-管理SolrCore5.4 SolrCore-可以理解为索引库5.5 SolrConfig-解析solrconfig.xml5.6 IndexSchema-解析schema.xml文件六、 检索参数6.1 CommonParams.java通用检索参数qt:指定那个类型来处理查询请求,一般不用指定,默认是standardq:是检索短语fq:过滤条件如果设置bookState:0的话,检索结果中就会将bookState不是0的结果过滤掉。wt:返回类型,有json、xml等sort:分类,publishDate desc,如果多个字段用逗号分隔start:开始位置rows:返回条数fl:返回字段列表,可以返回score查看分数df:默认检索字段 default fieldindent:返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。Raw Query Parameters:直接输入检索语句如:facet=true&facet.query=price:0 TO 10&facet.query=price:10 TO * 它自动识别这里面的参数,做一个分组统计。debugQuery:这个勾选之后可以看到文档的分的explain信息。solr debug准备时间执行时间6.2 HighlightParams高亮检索参数hl=true:高亮显示hl.fl:需要高亮的字段hl.simple.pre/hl.simple.post设置高亮的格式 默认下面文档中详细介绍了高亮的参数:/blog/static/42217920201292951457295/?suggestedreading6.3 FacetParams分组统计检索参数facet=true:表示需要分组统计facet.field:分组的字段如果有多个字段facet.field=cat& facet.field=typefacet.quert:范围统计如facet.query=price:0 TO 10&facet.query=price:10 TO *facet.range:我们系统中可以使用publishDate的按时间段统计:facet.range=publishDate&facet.range.start=NOW/YEAR-10YEARS&facet.range.end=NOW&facet.range.gap=+1YEAR没成功6.4 dismax与edismax参数参考:/solr/DisMaxRequestHandler?highlight=%28dismax%29/solr/DisMaxQParserPlugin/solr/ExtendedDisMax?highlight=%28edismax%29solr 的edismax与dismax比较与分析:/duck_genuine/article/details/8060026dismax是solr的一个比较受欢迎的检索模型 edismax是对dismax的扩展q.alt:当字段q为空时使用这个作为默认检索qf:设置字段的权重 creator15 title5空格隔开mm:Minimum Should Match q.op=AND = mm=100%; q.op=OR = mm=0%qs:Query Phrase Slop 步长pf:Phrase Fields To specify both a slop and a boost, usefieldslopboost如:title210.0 will use the title field with a phrase slop of 2 and a boost of 10.0。 A ph
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位招聘考试卫生类预防医学专业知识试卷(卫生统计)
- 2025年事业单位招聘考试综合类无领导小组讨论面试真题模拟试卷(复合材料类)
- 2025年事业单位招聘考试卫生类护理学专业知识试卷(护理管理学)
- 2025年室内装饰设计师(高级)室内设计心理学试题试卷
- 2025年物业管理员(中级)职业技能鉴定试卷:物业管理信息化与智能化
- 2025年四川省小学六年级英语毕业升学模拟试卷
- 2025年事业单位招聘考试公共基础知识试卷(五)
- 2025年特种设备作业人员考试特种设备作业人员安全操作规范考核试卷
- 2025年西班牙语DELEBC级写作冲刺试卷:求职信撰写技巧
- 2025年文职人员招聘考试公共科目试卷二:基础知识
- 火龙罐技术课件
- 幼儿园集团化办园实施方案
- 多学科会诊MDT胃恶性肿瘤
- (33)-钠钾泵细胞生物学
- 抗反转录病毒药物的毒副作用
- 项目档案归档目录一览表(档案室用)
- GB/T 242-2007金属管扩口试验方法
- 路基压实度汇总表
- 【食品生产加工技术】香肠的加工技术
- 小学数学三年级下轴对称、平移和旋转强化练习
- 助产士咨询门诊课件
评论
0/150
提交评论