• Solr第一讲——概述与入门


    一、solr介绍

      1.什么是solr

      Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。

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

      实现方案: 

        索引流程:solr客户端(浏览器、java程序)可以向solr服务端发送POST请求,请求内容是包含Field等信息的一个xml文档,通过该文档,solr实现对索引的维护(增删改)

        搜索流程:solr客户端(浏览器、java程序)可以向solr服务端发送GET请求,solr服务器返回一个xml文档。

        Solr同样没有视图渲染的功能

       2.solr和lucene的区别

      Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索应用。Lucene仅提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索应用。

       Solr的目标是打造一款企业级的搜索引擎系统,它是基于Lucene一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。

       

      最核心得区别是由工具包变成了独立服务,并且索引管理更加方便,可以集群!

    二、solr安装配置

      1.下载

      Solr和lucene的版本是同步更新的,最新的版本是5.2.1

      本课程使用的版本:4.10.3

        下载地址:http://archive.apache.org/dist/lucene/solr/

        下载版本:4.10.3

      Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。 

        下载lucene-4.10.3.zip并解压:

      官网:https://lucene.apache.org/

      

       各目录概述如下:

      

      2.安装配置

      solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),本教程使用Tocmat作为Servlet容器。

      SolrCore的配置

        1.SolrCore和SolrHome

        SolrHome是Solr运行的主目录,该目录中包括了多个SolrCore目录。SolrCore目录中包含了运行Solr实例所有的配置文件和数据文件,Solr实例就是SolrCore

        一个SolrHome可以包括多个SolrCore(Solr实例),每个SolrCore提供单独的搜索和索引服务。  

        每一个solrcore都可以单独对外提供搜索和索引服务。

        多个solrcore之间没有关系。

        2.solr界面简介

      

        Dashboard 

          仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。

         Logging

          Solr运行日志信息

         Cloud     

          Cloud即SolrCloud,即Solr云(集群),当使用Solr Cloud模式运行时会显示此菜单

         Core Admin

          Solr Core的管理界面。在这里可以添加SolrCore实例

         java properties

          Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。

         Tread Dump

           显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。

        Core selector(重点)

          Analysis(重点)

          

          通过此界面可以测试索引分析器和搜索分析器的执行情况。

          注:solr中,分析器是绑定在域的类型中的

          dataimport

          可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。

          默认没有配置,需要手工配置。   

        Document(重点)  

          通过/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新

          通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下:

          

         Query(重点)   

        通过/select执行搜索索引,必须指定“q”查询条件方可搜索。

        

      solr的详细配置与教程请参见 易百教程http://www.yiibai.com/solr/apache_solr_on_windows_environment.html#article-start

                   solr中国https://www.solr.cc/blog/

    三、solr的基本使用  

      1.schema文件  

      在schema.xml文件中,主要配置了solrcore的一些数据信息,包括Field和FieldType的定义等信息,

      在solr中Field和FieldType都需要先定义后使用

      注意:solr的各版本差异导致文件位置等可能会发生变化,比如这里搜索到的其中一个位置是(具体各文件待阅读文档):

        

      实例讲解:

        Field:定义Field

      <field name="title" type="text_simple" indexed="true" stored="true" multiValued="true"/>

      其中:(与lucene的概念是基本相通的)

          name——指定域的名称

        type——指定域的类型(用哪个分词器等)

        indexed——是否索引

        stored——是否存储

        multiValued——是否多值(比如商品信息中一个商品有多张图片,一个Field像存储多个值的话,必须将multiValued设置为true

      dynamicField:动态域

     <dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/> 

      Name——指定动态域的命名规则,此例中匹配i为后缀的

       uniqueKey:唯一键

    <uniqueKey>id</uniqueKey>

      其中的id是在Field标签中已经定义好的域名,而且该域要设置为requiredtrue 

      一个schema.xml文件中必须有且仅有一个唯一键

       copyField:复制域

    <copyField source="cat" dest="text"/>

      Source:要复制的源域的域名

      Dest:目标域的域名

      由dest指的的目标域,必须设置multiValued为true。

      可以通过复制将多个域复制到一个域进行操作

       FieldType:定义域的类型

     <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
          <analyzer type="index">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <!-- in this example, we will only use synonyms at query time
            <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
            <filter class="solr.FlattenGraphFilterFactory"/>
            -->
            <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
          <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
        </fieldType>

            name——指定域的名称

        class——指定域的类型对应的solr类型

        analyzer——指定分析器

        tokenizer——分词器

        filter——过滤器

      2.中文分词器

      使用IKAnalyzer中文分析器

      基本步骤: 

         第一步:把IKAnalyzer2012FF_u1.jar添加到solr/WEB-INF/lib目录下。

        第二步:复制IKAnalyzer的配置文件和自定义词典和停用词词典到solr的classpath下。

        第三步:在schema.xml中添加一个自定义的fieldType,使用中文分析器。

    <!-- IKAnalyzer-->
        <fieldType name="text_ik" class="solr.TextField">
          <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
        </fieldType>

        //这里的TextField与Lucene的TextField还是有差别的

        第四步:定义field,指定fieldtype属性为text_ik

    <!--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"/>
  • 相关阅读:
    绑定源特性的行为
    理解IOC和DI
    相遇~~~~
    选美素数~~~~~~~(⊙o⊙)
    狐狸找兔纸
    多重背包Q
    最长升序子序列
    构造逆序数
    田径赛马
    01背包M
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7488325.html
Copyright © 2020-2023  润新知