欢迎各位大牛指教

solr简介

Solr 是什么?

        Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。

        Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。

        它易于安装和配置,而且附带了一个基于HTTP 的管理界面。可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。

 

在eclipse中调试solr,便于我们更加的清晰的了解solr的运行原理,下面详细的写一下如何eclipse部署solr(4.10.0版本)的web工程。 

首先新建一个动态的Web工程 
 删除WebContent下的所有内容,

                
 到解压后的solr的solr-4.10.0\example\webapps目录下,
            
 

 解压solr.war包后,然后拷贝解压后所有的东西(除了solr.war本身),到刚才被清空的WebContent目录下:

 
 
 
 
 

拷贝完后的项目工程如下所以,有时候这里可能由于js校验出错,不影响运行,可忽略,如果有洁癖的同学们,可以找下,如何去掉js的校验即可。

 
 
 
 

在WebContent下新建一个solr_home文件夹,用来存放核心(索引库)

 
 

将解压后的 solr 4.10.0文件夹下的exampke下的mukticore内的所有文件 拷贝到solr_home文件夹中:

 
 
 

修改web.xml中 <env-entry>的路径,指向咱们新建的 solr_home  ,这里我用的是绝对路径

 
 
 
然后拷贝solr\solr-4.10.0\example\lib\ext下所有的日志包到我们项目的lib目录下,
并拷贝solr-4.10.0\example\resources\下的log4j.properties文件到我们工程的src目录下:
 
 
然后右击项目启动!
访问:

成功后的截图如下:

 
 
 
 
至此,大功告成!
 
如果我们想要调试solr的源码,我们就可以在src目录,将solr的源码包放进去,这样就可以调试了。
 
如:
        


==============================================================================================
 
 

引擎的一些操作:

 
 
    参考:http://www.cnblogs.com/llz5023/archive/2012/11/15/2772154.html
    一、索引库的增加,(创建新核心):
                  1、复制一个完整索引库,并修改两个 配置文件schema.xml 与 solrconfig.xml 
                        
                          
                         A:schema.xml中:(一处要改)
                                                            
                          B : solrconfig.xml  (两处要改)
                                     
                                    
 
 
                   2、在solr.xml中添加索引库  或者   通过界面化添加
 
                            solr.xml中:
                                        
 
                          界面化增加(引入):
                                               
                                            
 
                3、清空索引库中数据
                                        清除DATA文件夹下的所有文件
 
 
 二、索引库数据的添加
  • 三种方式:
  • 1、通过命令行(路径+核心名+jar+xml)
      • 首先将solr-4.10.0\example\exampledocs下的post.jar文件 放到咱们索引库里的exampledocs文件夹下
      • 选定指定的xml数据文件进行导入数据到索引库,*号代表 所有xml数据文件
      • 命令如下:
      •   
          添加数据成功!       

  

                     
              注意:
                           *.xml数据文件中的 field 的name值 也就是字段名,要与 schema.xml中的字段名有相对应的才行,
                            找不到对应字段 会报错    !!!   
                                
                            如:
                                   
                                        
 
 2、通过配置文件进行增加索引数据
  •  导入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 &gt; ${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>
     打开solr试图管理界面:
            
 
3.通过URL添加:
http://localhost:8088/solr/索引库名称/dataimport?command=导入方式&自定义属性=属性值&entity=实体名称
 例子:
 
4通过solrj 进行增加索引数据(会有单独api文件 给你们)
 
 
 
、索引库数据的搜索测试
   1、界面化检索、
            
                    

【注:以下是比较常用的参数说明】

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)指定输出格式,可以有 xmljsonphpphps。 

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 

 

    2、通过url检索(可结合solrj ,实用型)
        
     例:返回json类型
             http://localhost:8080/solr-test/my_core/select?q=*%3A*&wt=json&indent=true
           
 
、索引库数据的修改(修改其实就是覆盖)
 
        界面化:
                
还有就是利用solrj 进行修改(覆盖)。(参考其他文档)
 
 

分词器简介与配置

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班同学们  继续往下看:

 
stopword.dic    是过滤分词的,里面的词,不会分到分词库; 添加排除词 比如:and/or 等关键字  
myext.dic          是自定义分词文件(自己加的),可以在这里配置自己定义的词,会分出来; 
 
顾名思义:IKAnalyzer.cfg.xml  是用来加载上面两个文件的
    
具体配置:

步骤一:将 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分词器:

            
    <fieldType name="text" class="solr.TextField"> 
         <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
         <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
    </fieldType>

这样就可以使用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(字段)用于测试,如下:(分词字段)

  1. <field name="name" type="text_ik" indexed="true" stored="true"/>

 

然后打开solr的admin页面:

 

可以看到分词之后的效果。

 

                                   
注意:
       1、默认检索字段:一般将分词字段 设为默认检索字段(就是查询的时候不指定字段,会直接找默认字段)
               schema.xml 中设置<defaultSearchField>name</defaultSearchField>
         2、 分词后,solr会根据分词模糊查询,但是分词之间的 关键字 决定查询情况 OR  与 AND 就不用解释了吧
             schema.xml 中设置<solrQueryParser defaultOperator="OR"/>         注意 大写
       3、拷贝字段:
                           一般咱们搜索时,模糊查询的不只是一个字段,一个搜索词,一般要查询多个字段 找对应数据 ;
                           solr可以将多个字段中的数据 噼里啪啦 拷贝到指定的某一字段,那么咱们只要搜索拷贝字段即可。
                           例如:
                                        在搜索框中填写 :“兰州拉面”  ,拿着这个词去 地区字段 、名称字段 和 类型 中找结果 ,
                                   地区字段会找到关于兰州的信息,类型会找面食类型的信息等;我们将这些字段融到一起;
                                        就形成了拷贝字段,只查拷贝字段即可。
 
                                                                                                                                                                                        
                 schema.xml 中设置<field name="all_text" type="text" indexed="true" stored="true" multiValued="true"/>
                                                             <copyField source="name" dest="all_text" />    
                                                             <copyField source="type" dest="all_text" />    
 
            
 

维护索引

        在一般系统中维护的都是增删改,在Solr中的维护功能是增删和优化功能,

        在Solr中的修改操作就是先删掉再添加.在做索引维护之前,

        首先要做的是配置 schema.xml主要是按上面章节中的说明

        设置好字段信息(名称,类型,索引,存储,分词等信息),

        大概就像在数据库中新建一个表一样.设置好 schema.xml就可以进行索引相关操作了.

   
 

优化索引

       优化Lucene 的索引文件以改进搜索性能。索引完成后执行一下优化通常比较好。

       如果更新比较频繁,则应该在使用率较低的时候安排优化。

        一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。

 

 

  server.optimize();//不要频繁的调用..尽量在无人使用时调用


 

     http://blog.csdn.net/awj3584/article/details/16963525
引擎的:


        查询权重排序

        Facet分类查询,

 

        autocomplete

 
查询高亮 等,请参考http://www.cnblogs.com/HD/category/613196.html
posted @ 2016-08-23 13:22  夏沫秋至  阅读(409)  评论(0编辑  收藏  举报