solr简介
Solr 是什么?
Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。
Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。
它易于安装和配置,而且附带了一个基于HTTP 的管理界面。可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。
在eclipse中调试solr,便于我们更加的清晰的了解solr的运行原理,下面详细的写一下如何eclipse部署solr(4.10.0版本)的web工程。
首先新建一个动态的Web工程 删除WebContent下的所有内容,
解压solr.war包后,然后拷贝解压后所有的东西(除了solr.war本身),到刚才被清空的WebContent目录下:
拷贝完后的项目工程如下所以,有时候这里可能由于js校验出错,不影响运行,可忽略,如果有洁癖的同学们,可以找下,如何去掉js的校验即可。
在WebContent下新建一个solr_home文件夹,用来存放核心(索引库)
将解压后的 solr 4.10.0文件夹下的exampke下的mukticore内的所有文件 拷贝到solr_home文件夹中:
修改web.xml中 <env-entry>的路径,指向咱们新建的 solr_home ,这里我用的是绝对路径
成功后的截图如下:
引擎的一些操作:
- 三种方式:
- 1、通过命令行(路径+核心名+jar+xml)
- 首先将solr-4.10.0\example\exampledocs下的post.jar文件 放到咱们索引库里的exampledocs文件夹下
- 选定指定的xml数据文件进行导入数据到索引库,*号代表 所有xml数据文件
- 命令如下:
- java -Durl=http://localhost:8080/solr-test/my_core/update -Ddata=files -jar post.jar *.xml
-
- 导入JAR包:
- 新建data-confg.xml,到conf文件夹下
-
<dataConfig><!-- 数据源 --><dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/pengj" user="root"password="root" transactionIsolation="TRANSACTION_READ_COMMITTED" holdability="CLOSE_CURSORS_AT_COMMIT" /><document><!-- pk注意一定要与field中的colum对应上 --><entity name="stu" pk='id' transformer="RegexTransformer"query="select * from t_stu where id > ${dataimporter.request.ffff};"><field column='id' name='id' /><field column='name' name='name' /></entity></document></dataConfig>
- 一个配置文件可以配置多个数据源。增加一个dataSource元素就可以增加一个数据源了。
- 添加name属性可以区分不同的数据源,如:
name="ds-1" ; entity标签中指定对应数据源。 如:
dataSource="ds-1"。
-
solrconfig.xml文件中 加载data-confg.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"><lst name="defaults"><str name="config">data-config.xml</str></lst></requestHandler>
例子:
【注:以下是比较常用的参数说明】
q - 查询字符串,这个是必须的。如果查询所有*:* ,根据指定字段查询(Name:张三 AND Address:北京)
fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=Name:张三&fq=CreateDate:[20081001 TO 20091031],找关键字mm,并且CreateDate是20081001
fl - 指定返回那些字段内容,用逗号或空格分隔多个。
start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。
rows - 指定返回结果最多有多少条记录,配合start来实现分页。
sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(score desc, price asc)表示先 “score” 降序, 再 “price” 升序,默认是相关性降序。
wt - (writer type)指定输出格式,可以有 xml, json, php, phps。
fl表示索引显示那些field( *表示所有field,如果想查询指定字段用逗号或空格隔开(如:Name,SKU,ShortDescription或Name SKU ShortDescription【注:字段是严格区分大小写的】))
q.op 表示q 中 查询语句的 各条件的逻辑操作 AND(与) OR(或)
hl 是否高亮 ,如hl=true
hl.fl 高亮field ,hl.fl=Name,SKU
hl.snippets :默认是1,这里设置为3个片段
hl.simple.pre 高亮前面的格式
hl.simple.post 高亮后面的格式
facet 是否启动统计
facet.field 统计field
分词器简介与配置
Solr默认是没有中文分词的,其中solr默认的比较常用的数据类型有下面几种:string、long、int。
IK分词器,是国人做的一个开源的分词器,所以主要说下IK分词器的配置。
下载 "IK Analyzer 2012FF_hf1.zip"包。 详见http://www.solrcn.com/?tag=ik%E5%88%86%E8%AF%8D%E5%99%A8
解压后的目录结构:
其中已经有比较详细的文档了,但是文档中并没有对solr分词器的配置有详细的说明。
所以请1511班同学们 继续往下看:
具体配置:
步骤一:将 IKAnalyzer2012FF_u1.jar拷贝到目录"$TOMCAT_HOME \webapps\solr\WEB-INF\lib"中
步骤二:将IKAnalyzer.cfg.xml、stopword.dic,myext.dic拷贝到目录$TOMCAT_HOME \webapps\solr\WEB-INF\classes目录下,没有则新建classes目录。
步骤三:在每个核心中的schema.xml中配置IK分词器:
这样就可以使用ik分词器了。
其中isMaxWordLength是指分词的细粒度,可以分别制定index索引和query查询的分词细粒度,
建议将index的isMaxWordLength设置为false,这样就采用最细分词,是索引更精确,查询时尽量能匹配,
而将query的isMaxWordLength设置为true,采用最大分词,这样能够使查询出来的结果更符合用户的需求。
这样查询时分词才能成功,比如搜索中华人民共和国,如果不配置的话,默认是短语匹配,就只搜索文档中包含中华人民共和国的结果,但是如果配置了查询分词,那么中华、人民….都能被匹配。
注意: solr4.8以上,需要把各核心schema.xml中的<schema name="example core zero" version="1.1">版本由1.1改为1.5
IK分词器使用与测试
之后在schema.xml中配置一个field(字段)用于测试,如下:(分词字段)
-
<field name="name" type="text_ik" indexed="true" stored="true"/>
然后打开solr的admin页面:
可以看到分词之后的效果。
维护索引
在一般系统中维护的都是增删改,在Solr中的维护功能是增删和优化功能,
在Solr中的修改操作就是先删掉再添加.在做索引维护之前,
首先要做的是配置 schema.xml主要是按上面章节中的说明
设置好字段信息(名称,类型,索引,存储,分词等信息),
大概就像在数据库中新建一个表一样.设置好 schema.xml就可以进行索引相关操作了.
优化索引
优化Lucene 的索引文件以改进搜索性能。索引完成后执行一下优化通常比较好。
如果更新比较频繁,则应该在使用率较低的时候安排优化。
一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。
server.optimize();//不要频繁的调用..尽量在无人使用时调用 |
http://blog.csdn.net/awj3584/article/details/16963525