当前位置:文档之家› 拓薪教育-solr教程

拓薪教育-solr教程

全文检索技术Solr讲师:任亮1课程计划1、站内搜索技术的选型2、什么是Solr3、Solr的安装及配置,solr整合tomcat。

4、Solr对索引库的维护,基于solr的后台管理界面a)增加文档b)删除文档c)修改文档5、Solr查询索引,基于solr的后台管理界面6、Solr的客户端SolrJa)索引的维护b)索引的查询7、综合案例,电商网站的搜索功能2站内搜索技术的选型1、Lucene实现站内搜索。

开发工作量大,还要对索引库的维护投入大量的工作,索引的优化查询的优化,大并发量的考虑。

不推荐使用。

2、可以使用搜索搜索引擎提供站内搜索功能。

索引库放在搜索引擎上,不能维护。

优点就非常简单。

3、solr技术,solr是基于lucene开发的一个全文检索服务器,提供了全套的全文检索解决方案。

推荐使用的技术。

3什么solr3.1 Solr的概念Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。

Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。

Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用POST 方法向Solr 服务器发送一个描述Field 及其内容的XML 文档,Solr 根据xml文档添加、删除、更新索引。

Solr 搜索只需要发送HTTP GET 请求,然后对Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。

Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

总之solr就是一个web工程,提供一个基于http的web服务。

3.2 Solr的下载地址/dyn/closer.cgi/lucene/solr/5.1.0本课程的Solr版本是:4.10.33.3 Solr的包结构4Solr集成tomcat4.1 第一步,安装tomcat要求jdk:1.7以上版本1.7.0_72要求tomcat7以上版本apache-tomcat-7.0.534.2 第二步:安装Solr.war1、把solr-4.10.3\dist\solr-4.10.3.war复制到tomcat的webapp目录下。

2、解压。

可以启动tomcat解压也可以使用解压缩软件解压。

3、把解压后的solr-4.10.3文件夹改名为sorl,目的是为了访问url时方便。

4、把solr-4.10.3.war删掉。

4.3 第三步:把日志相关的jar包添加到solr工程中把\solr-4.10.3\example\lib\ext目录下的所有jar包复制到solr工程中。

4.4 第四步:配置Solrhome4.4.1Solrhome:就是solr服务器所有的配置文件存放的路径。

\solr-4.10.3\example\solr文件夹就是一个标准的solrhome,可以直接使用。

把\solr-4.10.3\example\solr文件夹复制到d:\temp\0122目录下,改名为solrhome,改名不是必须,是为了便于理解。

4.4.2solrcoreSolrhome下的collection1叫做solrcore,是一个solr的实例。

一个solrcore就相当于mysql的一个数据库,实际上就是一个独立的索引库。

3、每个solrcore中有一个conf文件夹,包含了此solrcore的全部配置。

Solrconfig.xml如果使用默认配置可以不用做任何配置。

4.4.3Solrconfig.xmlLib:solrcore扩展时依赖的jar包。

可以指定jar包所在的路径。

默认路径是collection1\lib 文件夹。

如果没有lib文件夹就创建一个。

dataDir:索引库存放的路径。

默认路径是collection1\data目录。

当服务启动后会自动创建。

requestHandler:处理请求的路径。

查询索引时使用的url路径:维护索引时使用的url路径:defaultQuery:默认的查询条件*:*4.5 第五步:告诉solr服务器solrhome的位置使用jdni的方式配置solrhome的位置。

修改solr工程的web.xml,指定solrhome的位置。

4.6 第六步:启动tomcat访问:http://localhost:8080/solr5Solr管理界面介绍5.1 Core Admin可以在此查看solrcore的信息。

5.1.1添加solrcore第一步:把solrhome下的collection1复制一份,改名为collection2 第二步:修改core.properties修改name=collection2第三步:重启tomcat5.2 Core selecter选择要管理的solrcore5.3 Analysis查看域的分词效果,域是solr中定义的域。

5.4 Dataimport导入数据功能,把数据库中的数据导入到索引库中。

5.5 Documents维护索引的功能,包括增删改操作。

5.6 Query 查询索引的功能6索引库的维护6.1 域的名称定义schema.xml在solr中域的名称必须先定义后使用。

域的名称定义在collection1\conf\schema.xml中定义。

每个文档对象必须有个id域,相当于mysql表的主键。

6.1.1Field:域的定义Name属性:定义域的名称Type属性:域的类型Indexed属性:是否索引Stored属性:是否存储multiValued属性:是否多值6.1.2dynamicField:动态域只有域的名称和动态域的表达式相匹配,这个域的名称就可以使用。

Name属性:动态域的表达式Type属性:域的类型Indexed属性:是否索引Stored属性:是否存储multiValued属性:是否多值6.1.3uniqueKey定义主键6.1.4copyField复制域当创建索引时,会把源域的内容复制到目标域中。

当搜索时,只需要指定目标域为默认搜索域,这样就可以不用指定多个默认搜索域,会提高查询的效率。

6.1.5fieldType域类型定义定义了域的类型以及此此类型对应的class,在类型定义中还可以指定分析器。

可以定义自己的域类型,指定此域使用中文分析器。

6.2 中文分析器的配置中文分析器使用IKAnalyzer。

第一步:把IKAnalyzer的jar包添加到solr工程中第二步:把IKAnalyzer用到的配置文件以及扩展词典和停用词词典复制到solr工程的classpath下。

注意扩展词典和停用词词典字符集要保证是utf-8格式。

第三步:在schema.xml中配置中文分析器。

<!-- IKAnalyzer--><fieldType name="text_ik" class="solr.TextField"><analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/></fieldType>第四步:定义使用中文分析器的域<!--IKAnalyzer Field--><field name="title_ik" type="text_ik" indexed="true" stored="true" /><field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/> 第五步:重启tomcat6.3 业务字段的定义如果不使用Solr提供的Field可以针对具体的业务需要自定义一套Field,如下是商品信息Field:<!--product--><field name="product_name" type="text_ik" indexed="true" stored="true"/><field name="product_price" type="float" indexed="true" stored="true"/><field name="product_description" type="text_ik" indexed="true" stored="false" /><field name="product_picture" type="string" indexed="false" stored="true" /><field name="product_catalog_name" type="string" indexed="true" stored="true" /><field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/><copyField source="product_name" dest="product_keywords"/><copyField source="product_description" dest="product_keywords"/>6.4 添加文档信息6.5 删除文档6.5.1根据id删除文档<delete><id>0001</id></delete><commit/>6.5.2根据查询删除文档<delete><query>id:0002</query></delete><commit/>6.6 更新文档更新的原理也是先删除后添加,并且没有对应的更新方法,只需要再添加一条和被更新的文档id一致的新文档就可以了。

相关主题