Solr全文检索服务器1课程计划1、solr介绍a)什么是solrb)Solr和lucene的区别2、Solr的安装配置(重点)3、Solr的基本使用(重点)4、Solrj的使用(重点)5、京东案例(重点)2Solr介绍什么是solr2.1Solr是apache的顶级开源项目,它是使用java开发,基于lucene的全文检索服务器。Solr比lucene提供了更多的查询语句,而且它可扩展、可配置,同时它对lucene的性能进行了优化。Solr是如何实现全文检索的呢?索引流程:solr客户端(浏览器、java程序)可以向solr服务端发送POST请求,请求内容是包含Field等信息的一个xml文档,通过该文档,solr实现对索引的维护(增删改)搜索流程:solr客户端(浏览器、java程序)可以向solr服务端发送GET请求,solr服务器返回一个xml文档。Solr同样没有视图渲染的功能。Solr和lucene的区别2.2Lucene是一个全文检索引擎工具包,它只是一个jar包,不能独立运行,对外提供服务。Solr是一个全文检索服务器,它可以单独运行在servlet容器,可以单独对外提供搜索和索引功能。Solr比lucene在开发全文检索功能时,更快捷、更方便。3Solr安装配置下载solr3.1Solr和lucene的版本是同步更新的,最新的版本是5.2.1本课程使用的版本:4.10.3下载地址:下载版本:4.10.3Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。运行环境3.2Jdk:1.7及以上Solr:4.10.3Mysql:5XWeb服务器:tomcat7初始化数据库脚本3.2.1Solr安装配置3.3Solr的安装部署3.3.1第一步:安装tomcat第二步:将以下的war包,拷贝到tomcat的webapps目录下第三步:解压缩war包解压缩之后,将war包删掉第四步:添加solr的扩展服务包将以上jar包,添加到以下目录第五步:添加log4j.properties将以下目录的文件进行拷贝复制到以下目录第六步:在web.xml中指定solrhome的目录Solrcore的安装3.3.23.3.2.1Solrcore和solrhomeSolrhome是solr服务运行的主目录,一个solrhome目录里面包含多个solrcore目录,一个solrcore目录里面了一个solr实例运行时所需要的配置文件和数据文件。每一个solrcore都可以单独对外提供搜索和索引服务。多个solrcore之间没有关系。3.3.2.2Solrcore和solrhome的目录结构Solrhome的目录结构Solrcore目录3.3.2.3Solrcore的安装安装solrcore需要先安装solrhome将以下目录的文件进行拷贝复制到以下目录这样solrhome和solrcore就安装成功了。3.3.2.4Solrcore配置在solrcore的conf目录下,有一个solrconfig.xml的配置文件,该配置文件,配置来solrcor的运行信息在该文件中,主要配置三个标签:lib标签、datadir标签、requestHandler标签如果对该文件不进行配置也可以,即使用默认的配置项。3.3.2.4.1Lib标签Solrcore需要添加一个扩展依赖包,通过lib标签来指定依赖包的地址solr.install.dir:表示solrcore的安装目录将以下目录的文件进行拷贝复制到以下目录修改lib标签3.3.2.4.2datadir标签每个SolrCore都有自己的索引文件目录,默认在SolrCore目录下的data中。data数据目录下包括了index索引目录和tlog日志文件目录。如果不想使用默认的目录也可以通过solrConfig.xml更改索引目录,如下:3.3.2.4.3requestHandler标签requestHandler请求处理器,定义了索引和搜索的访问方式。通过/update维护索引,可以完成索引的添加、修改、删除操作。提交xml、json数据完成索引维护,索引维护小节详细介绍。通过/select搜索索引。设置搜索参数完成搜索,搜索参数也可以设置一些默认值,如下:requestHandlername=/selectclass=solr.SearchHandler!--设置默认的参数值,可以在请求地址中修改这些参数--lstname=defaultsstrname=echoParamsexplicit/strintname=rows10/int!--显示数量--strname=wtjson/str!--显示格式--strname=dftext/str!--默认搜索字段--/lst/requestHandlersolr界面介绍3.4启动solr服务仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。Logging3.4.2Solr运行日志信息Cloud3.4.3Cloud即SolrCloud,即Solr云(集群),当使用SolrCloud模式运行时会显示此菜单,该部分功能在第二个项目,即电商项目会讲解。CoreAdmin3.4.4SolrCore的管理界面。在这里可以添加SolrCore实例。javaproperties3.4.5Solr在JVM运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。TreadDump3.4.6显示SolrServer中当前活跃线程信息,同时也可以跟踪线程运行栈信息。Coreselector(重点)3.4.7选择一个SolrCore进行详细操作,如下:3.4.7.1Analysis(重点)通过此界面可以测试索引分析器和搜索分析器的执行情况。注:solr中,分析器是绑定在域的类型中的。3.4.7.2dataimport可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。默认没有配置,需要手工配置。3.4.7.3Document(重点)通过/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下:overwrite=true:solr在做索引的时候,如果文档已经存在,就用xml中的文档进行替换commitWithin=1000:solr在做索引的时候,每个1000(1秒)毫秒,做一次文档提交。为了方便测试也可以在Document中立即提交,/doc后添加“commit/”3.4.7.4Query(重点)通过/select执行搜索索引,必须指定“q”查询条件方可搜索。多solrcore的配置3.5配置多solrcore的好处:1、在进行solrcloud的时候,必须配置多solrcore2、每个solrcore之间是独立的,都可以单独对外提供服务。不同的业务模块可以使用不同的solrcore来提供搜索和索引服务。添加第一步:复制solrhome下的collection1目录到本目录下,修改名称为collection2第二步:修改solrcore目录下的core.properties这样多solrcore就配置完成了。4Solr的基本使用Schema.xml4.1在schema.xml文件中,主要配置了solrcore的一些数据信息,包括Field和FieldType的定义等信息,在solr中,Field和FieldType都需要先定义后使用。Filed4.1.1定义Field域fieldname=idtype=stringindexed=truestored=truerequired=truemultiValued=false/Name:指定域的名称Type:指定域的类型Indexed:是否索引Stored:是否存储Required:是否必须multiValued:是否多值,比如商品信息中,一个商品有多张图片,一个Field像存储多个值的话,必须将multiValued设置为true。dynamicField4.1.2动态域dynamicFieldname=*_itype=intindexed=truestored=true/Name:指定动态域的命名规则uniqueKey4.1.3指定唯一键uniqueKeyid/uniqueKey其中的id是在Field标签中已经定义好的域名,而且该域要设置为required为true。一个schema.xml文件中必须有且仅有一个唯一键copyField4.1.4复制域copyFieldsource=catdest=text/Source:要复制的源域的域名Dest:目标域的域名由dest指的的目标域,必须设置multiValued为true。FieldType4.1.5定义域的类型fieldTypename=text_generalclass=solr.TextFieldpositionIncrementGap=100analyzertype=indextokenizerclass=solr.StandardTokenizerFactory/filterclass=solr.StopFilterFactoryignoreCase=truewords=stopwords.txt/!--inthisexample,wewillonlyusesynonymsatquerytimefilterclass=solr.SynonymFilterFactorysynonyms=index_synonyms.txtignoreCase=trueexpand=false/--filterclass=solr.LowerCaseFilterFactory//analyzeranalyzertype=querytokenizerclass=solr.StandardTokenizerFactory/filterclass=solr.StopFilterFactoryignoreCase=truewords=stopwords.txt/filterclass=solr.SynonymFilterFactorysynonyms=synonyms.txtignoreCase=trueexpand=true/filterclass=solr.LowerCaseFilterFactory//analyzer/fieldTypeName:指定域类型的名称Class:指定该域类型对应的solr的类型Analyzer:指定分析器Type:index、query,分别指定搜索和索引时的分析器Tokenizer:指定分词器Filter:指定过滤器中文分词器4.2使用ikanalyzer进行中文分词第一步:将ikanalyzer的jar包拷贝到以下目录第二步:将ikanalyzer的扩展词库的配置文件拷贝到目录第三步:配置FieldType第四步:配置使用中文分词的Field第五步:重启tomcat配置业务Field4.3需求4.3.1对京东案例中的products表的数据进行索引,所以需要先定义对应的Field域。分析配置4.3.2Products的表结构需要往索引库添加的字段有:pid、name、catalog、catalog_name、price、description、pictureFieldType:经分析,由于中文分词器已经配置完FieldType,所以目前FieldTy