solr的使用

标签: solr | 发表时间:2016-12-13 20:31 | 作者:郭小小小
出处:http://www.iteye.com

solr的原理不和大家一一讲述,主要讲solr在使用过程中的注意事项

一.solr建立服务

 首先是安装solr,安装步骤省略。。。。(不要说我懒,安装步骤导出都是。。。)

成功之后 需要在solr里面建立一个针对你的业务的服务,我想建立一个叫做discuz的服务

./bin/solr create -c discuz

 

然后你在你的solr目录 :solr-5.5.3/server/solr/  下看见了discuz   ,这是你刚刚创建的,针对某一业务的整个搜索配置都是在这个目录下配置的。

discuz目录解析:

    1.conf :配置文件(索引、分词库、停词库等等配置)

    2.core.properties

    3.data

二.建立索引

   建立索引就是数据库和solr建立一个关系,可以满足数据库数据定时导入solr里面,方面solr实现搜索。那么怎么建立索引呢? 

   在solr-5.5.3/server/solr/discuz/conf/data-config.xml 里面

 

<dataConfig>
    <dataSource type="JdbcDataSource"
        driver="com.mysql.jdbc.Driver"
        url="jdbc:mysql://11.11.11.11:800/database"
        user="root" password="123456"/>
    <document>
        <entity name="database" query="SELECT * FROM table;  "  
 deltaQuery="SELECT id  FROM table  where  `create` > unix_timestamp('${dataimporter.last_index_time}' ;  " 
  deltaImportQuery="SELECT * FROM table where id =${dataimporter.delta.tid}"  pk='tid'>
            <field column="id" name="id" />
            <field column="subject" name="subject" />
            <field column="views" name="views" />
           <field column="vip" name="vip" />
            <field column="message" name="message" />
            <field column="create" name="create" />
        </entity>
    </document>
</dataConfig>

 

 

  dataConfig 里面是对数据库导入的一个配置

   dataSource:数据库连接配置

   document:数据库索引配置

       entity:name= 数据库名字

                   query=全量导入数据的sql

                  deltaQuery:增量导入的id

                  deltaImportQuery:增量导入的sql  

 解释一下全量和增量:正常数据库导入solr第一次是全部导入,但是随着时间的变化数据库和solr数据不一致,这时候需要再次导入,按时间技术,半小时或者更合适的时间,只需要增量导入即可,更合适的时间再次全量导入即可

               field  这些是返回字段的定义

 

==到现在数据库和solr的关系完事了,下面是solr自身对这些字段的处理

三.solr 对展示字段以及搜索的配置

   在solr-5.5.3/server/solr/discuz/conf/solrconfig.xml

   1.添加一下代码

<schemaFactory class="ManagedIndexSchemaFactory">
      <bool name="mutable">true</bool>
      <str name="managedSchemaResourceName">managed-schema</str>
 </schemaFactory>

 

 

   在conf下面的 managed-schema 文件里对索引配置

 1.配置中文分词mmseg4j

 

<!-- mmseg4j-->
    <fieldType name="text_mmseg4j_complex" class="solr.TextField" positionIncrementGap="100" >  
        <analyzer type="index">  
           <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/>  
           <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
           <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        </analyzer>
        <analyzer type="query">
           <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/> 
           <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
           <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        </analyzer>
    </fieldType>  
    <fieldType name="text_mmseg4j_maxword" class="solr.TextField" positionIncrementGap="100" >  
        <analyzer>  
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/>
        </analyzer>  
    </fieldType>
    <fieldType name="text_mmseg4j_simple" class="solr.TextField" positionIncrementGap="100" >  
        <analyzer>  
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/>     
        </analyzer>  
        </fieldType>
    <!-- mmseg4j-->

   solr-5.5.3/server/solr/discuz/conf/dic:中文分词的分词库目录,在改目录下放word.dic分词文件

 stopwords.txt:停词文件

 synonyms.txt:近义词文件

    analyzer type="index":索引检查分词、停词、近义词

   analyzer type="query":查找检查分词、停词、近义词

2.配置索引字段、字段类型、查询字段的中文分词类型

 

<field name="submes" type="text_mmseg4j_complex" indexed="true" stored="true" required="true" multiValued="true" />
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="vip" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="views"    type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="create" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="subject" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="message" type="text_general" indexed="true" stored="true" required="true" multiValued="false" />
<copyField source="subject" dest="submes" />
<copyField source="vip" dest="submes" />
<copyField source="views" dest="submes" />
<copyField source="create" dest="submes" />

 field 字段定义了solr展示的类型

   name:字段名字

   type:字段类型(如果是要进行查询的字段,类型为中文分词类型如:text_mmseg4j_complex)

   indexed:true

    stored:true

   required:true

        multiValued:查询字段设置为true ,其他为false

copyField : 拷贝需要索引的字段到整合字段中 submes是本列子中的整合字段  solr查询也是查询这个字段

  这个字段可以根据多个字段进行权重设置,并且打分,排序

 

 

四.重启solr

  discuz配置都已经更改完,现在需要重启生效:

  ./bin/solr restart 

  对于一些大的网站而言,重启整个solr回导致其他业务无法搜索,所以可以搞一个zookeep 来一个分布式 管理就可以了

 

 

 五.使用

1.增量导入,在你的solr使用界面上左边下拉框找到discuz 

  下面出现的

  Dataimport: 是执行增量全量导入的

  query:搜索

  analysis:分词

 

 

无法加载图片,根据很难形容,但是打开这个界面就知道了

 

2.搜索打分:有的时候我们除了想根据匹配度排序外,还想根据浏览量、创建时间、是否是vip等综合因素排序,

在curl请求时 请求参数要加上下面的值:

       $params['defType'] = 'edismax' ;

       $params['bf'] = "sum(linear(vip,1000,0),linear(sqrt(log(linear(views,1,2))),100,0),sqrt(log(create)))";

    

  bf里面的参数是solr支持的打分标准的函数,具体使用参考http://mxsfengg.iteye.com/blog/352191 详解  很不完善,后续还会完善,如有问题随时提问

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [solr] 推荐:

Solr SpellCheck 应用

- - 开源软件 - ITeye博客
通过对各类型的SpellCheck组件学习,完成项目拼写检查功能. 本文使用基于拼写词典的实现方式,solr版本为5.3.0. SpellCheck 简述. 拼写检查是对用户错误输入,响应正确的检查建议. 比如输入:周杰轮,响应:你是不是想找 周杰伦. Solr的拼写检查大致可分为两类,基于词典与基于Solr索引.

Solr DocValues详解

- - 企业架构 - ITeye博客
什么是docValues. docValues是一种记录doc字段值的一种形式,在例如在结果排序和统计Facet查询时,需要通过docid取字段值的场景下是非常高效的. 为什么要使用docValues. 这种形式比老版本中利用fieldCache来实现正排查找更加高效,更加节省内存. 倒排索引将字段内存切分成一个term列表,每个term都对应着一个docid列表,这样一种结构使得查询能够非常快速,因为term对应的docid是现成就有的.

solr的使用

- - Web前端 - ITeye博客
solr的原理不和大家一一讲述,主要讲solr在使用过程中的注意事项.  首先是安装solr,安装步骤省略. (不要说我懒,安装步骤导出都是. 成功之后 需要在solr里面建立一个针对你的业务的服务,我想建立一个叫做discuz的服务. 然后你在你的solr目录 :solr-5.5.3/server/solr/  下看见了discuz   ,这是你刚刚创建的,针对某一业务的整个搜索配置都是在这个目录下配置的.

Solr调优参考

- - 淘宝网通用产品团队博客
共整理三部分,第一部分Solr常规处理,第二部分针对性性处理,前者比较通用,后者有局限性. 务必根据具体应用特性,具体调节参数,对比性能. 具体应用需要全面去把控,各个因素一起起作用. 第一部分. E文连接 http://wiki.apache.org/solr/SolrPerformanceFactors.

Solr之缓存篇

- - 淘宝网综合业务平台团队博客
Solr在Lucene之上开发了很多Cache功能,从目前提供的Cache类型有:. 而每种Cache针对具体的查询请求进行对应的Cache. 本文将从几个方面来阐述上述几种Cache在Solr的运用,具体如下:. (1)Cache的生命周期. (2)Cache的使用场景. (3)Cache的配置介绍.

Solr主从备份

- - 研发管理 - ITeye博客
SOLR复制模式,是一种在分布式环境下用于同步主从服务器的一种实现方式,因之前提到的基于rsync的SOLR不同方式部署成本过高,被SOLR1.4版本所替换,取而代之的就是基于HTTP协议的索引文件传输机制,该方式部署简单,只需配置一个文件即可. 以下讲解具体操作步骤: . 步骤分主服务器和从服务器,允许有多个从服务器,即从服务器的配置一样.

solr相似匹配

- - CSDN博客推荐文章
相似匹配   在我们使用网页搜索时,会注意到每一个结果都包含一个 “相似页面” 链接,单击该链接,就会发布另一个搜索请求,查找出与起初结果类似的文档. Solr 使用 MoreLikeThisComponent(MLT)和 MoreLikeThisHandler 实现了一样的功能. 如上所述,MLT 是与标准 SolrRequestHandler 集成在一起的;MoreLikeThisHandler 与 MLT 结合在一起,并添加了一些其他选项,但它要求发布一个单一的请求.

Solr与Mysql集成指南

- sun - 草根网:互联网界的读者文摘
在《企业级搜索引擎Solr使用入门指南》及《企业级搜索引擎Solr交流》中对Solr的使用做了简单介绍. 在数据库驱动的应用中,当时采....

Solr\Lucene优劣势分析

- - 淘宝网综合业务平台团队博客
最早lucene2.4以及以前,追溯到2008年前后,lucene刚刚引起大家的关注,到后来Nutch. 、solr的出现,lucene变得更加热. Nutch、Solr的发展,极大推动了lucene的升级. 对于一些接触过搜索,使用过lucene、solr的人来说,一般都会感觉lucene、solr很牛逼.