搜索引擎---solr

一、定义:

Solr是apache的顶级开源项目,它是使用java开发 ,基于lucene的全文检索服务器,solr同样没有视图渲染的功能。

Solr是如何实现全文检索的呢?

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

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

二、solr和Lucene的区别

Lucene是一个全文检索引擎工具包,它只是一个jar包,不能独立运行,对外提供服务。

Solr是一个全文检索服务器,它可以单独运行在servlet容器,可以单独对外提供搜索和索引功能。Solr比lucene在开发全文检索功能时,更快捷、更方便。

三、solr安装(Windows环境下)

1.下载solr并解压,此处解压包名为solr-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

2.运行环境

l  Jdk:1.7及以上

l  Solr:4.10.3

l  Mysql:5X

l  Web服务器:tomcat 7

3.安装部署

  • 安装tomcat,安装文件夹名为tomcat
  • 将solr-4.10.3/example/webapps下的solr.war拷贝到tomcat/webapps目录下
  • 解压缩solr.war,启动tomcat,再关闭tomcat,即解压缩成功,成功后将war包删除
  • 将solr-4.10.3/example/lib/ext下的所有jar包拷贝到tomcat/webapps/solr/WEB-INF/lib目录下
  • 将solr-4.10.3/example/resources拷贝到tomcat/webapps/solr/WEB-INF/classes目录下(没有该目录则创建)
  • 指定solrhome目录,下面简写solrhome目录为hm19/solrhome,修改tomcat/webapps/solr/WEB-INF/web.xml
  • solrhome和solrcore关系:Solrhome是solr服务运行的主目录,一个solrhome目录里面包含多个solrcore目录,一个solrcore目录里面了一个solr实例运行时所需要的配置文件和数据文件
  • 安装solrcore,拷贝solr-4.10.3/example/solr目录下所有东西到hm19/solrhome目录下
  • solrcore配置
    • solrcore配置,/hm19/solrhome/collection1/conf/solrconfig.xml,主要配置三个标签:lib标签、datadir标签、requestHandler标签如果对该文件不进行配置也可以,即使用默认的配置项
    • 拷贝solr-4.10.3/contrib文件夹和solr-4.10.3/dist文件夹拷贝到hm19目录下
    • 修改solrconfig.xml的lib标签
    • datadir标签:每个SolrCore都有自己的索引文件目录 ,默认在SolrCore目录下的data中,这里不配置
    • requestHandler标签:requestHandler请求处理器,定义了索引和搜索的访问方式,这里不配置
  • 启动solr服务:http://localhost:8080/solr

4.多solrcore配置(看情况配置,可不配)

  • 复制solrhome下的collection1目录到本目录下,修改名称为collection2

  • 修改solrcore目录下的core.properties,将 name=collection1 改为 name=collection2

5.solr的基本使用

  • schema.xml(hm19/solrhome/collection1/conf/schema.xml):主要配置了solrcore的一些数据信息,包括Field和FieldType的定义等信息,在solr中,Field和FieldType都需要先定义后使用。
  • schema.xml配置:定义域的类型,将下面的代码加到schema.xml里面,位置:与其他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.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
Name:指定域类型的名称
Class:指定该域类型对应的solr的类型
Analyzer:指定分析器
Type:index、query,分别指定搜索和索引时的分析器
Tokenizer:指定分词器
Filter:指定过滤器

  • 配置中文分词器(使用ikanalyzer进行中文分词)
    • 将ikanalyzer的jar包拷贝到tomcat/webapps/solr/WEB-INF/lib目录下
    • 将ikanalyzer的扩展词库的配置文件拷贝到tomcat/webapps/solr/WEB-INF/classes目录下

    • 配置中文分词器的fieldType,在schema.xml配置

    • 配置使用中文分词器的fieldType

    • 重启tomcat,就可以使用中文分词器的搜索域了

6.solrj的使用(solr服务器的java客户端)

  • 引入jar包,将solr-4.10.3/dist/solr-solrj-4.10.3.jar和solr-4.10.3/example/lib/ext/*.jar拷贝到项目的lib文件夹
  • 添加、修改索引:在solr中,索引库中都会存在一个唯一键,如果一个Document的id存在,则执行修改操作,如果不存在,则执行添加操作

  • 删除索引(根据ID)

  • 删除索引(根据条件)

  • 查询索引

猜你喜欢

转载自blog.csdn.net/weixin_41762621/article/details/80927112