使用 Solr 构建企业级搜索服务器

栏目: 后端 · 发布时间: 5年前

内容简介:最近因项目需要一个全文搜索引擎服务, 在考察了Lucene及Solr后,我们选择了Solr. 本文简要记录了基于Solr搭建一个企业搜索服务器的过程.网上的资料太多千篇一律,也可能版本不同,总之在参照的时候并不顺利,因此在通过官网的介绍并逐步实践的基础上,我们整理了这个文档,希望能帮助到有类似需求的大家.后记: 经过以上步骤后,我们的Solr应用就基本结束. 不过因Solr作为一个企业级的搜索产品,功能原不止于此,文中并没有涵盖完全Solr的操作, 如关于增量索引设置问题,各位如果有需要可以在此基础上继续

最近因项目需要一个全文搜索引擎服务, 在考察了Lucene及Solr后,我们选择了Solr. 本文简要记录了基于Solr搭建一个企业搜索服务器的过程.网上的资料太多千篇一律,也可能版本不同,总之在参照的时候并不顺利,因此在通过官网的介绍并逐步实践的基础上,我们整理了这个文档,希望能帮助到有类似需求的大家.

  1. Solr 介绍
    1. Solr 是一个基于Lucene技术的企业级搜索应用服务器, 运行在JVM环境中, 对外以类似webservice http模式提供接口.可简单的通过配置的形式实现一个企业级的搜索服务.
  2. 安装与部署
    1. JDK环境配置

      安装配置jdk, 并设置 JAVA_HOME 环境变量,

      ps: 楼主最开始使用的是1.8的版本, 也挺正常, 但后面因为在尝试导入sqlserver 2014数据库数据的时候,可能是楼主下载的mssql-jdbc.jar 包比较新的原因, 总是出现类似版本过低的提示, 便直接升级到了最新的jdk11版本.

    2. 下载Solr包及配置运行环境
      1. 去Solr官网下载程序包 ,楼主下载了最新的7.5版本 http://www.apache.org/dyn/closer.lua/lucene/solr/7.5.0
      2. Solr 本身内置了Severlet, 故可直接运行, 当然如果不习惯,也可以将其挂在类似 tomcat 等其他Serverlet 容器下运行.
      3. 将下载的Solr 包解压到合适位置后, 在其bin路径下, 执行 solr start 后, 如出现下面的提示则表示环境正常了.

        使用 Solr 构建企业级搜索服务器
        此时便可通过浏览器访问 http://localhost:8983

        , 一切正常的话便可预见类似下面的管理中心界面

        使用 Solr 构建企业级搜索服务器
        若出现错误, 通常可能为jdk环境没有配置正常,可通过提示对应处理.
      4. 创建索引库 Core
        1. 在 server\solr 目录下,新建文件夹,本文以创建一个用于搜索物料产品的索引库为例. 姑且取名为 icvip 为例, 并默认配置[ server\solr\configsets\_default\conf ] 复制到此路径下.
        2. 在管理中心界面中,选择左侧的 Core Admin 菜单,创建一个新的 Core. 本处将name设置为icvip,instanceDir 设置为icvip, 注意下面的提示:instanceDir 和 DataDir 一定要在此步骤之前存在,这也是我们为何要在界面创建之前先做第一步的原因.参考截图如下

          使用 Solr 构建企业级搜索服务器
      5. 正常添加后, 我们便可以对这个索引库做操作了,如导入数据,分词器,上传文档,查询测试....参见如下截图中的左边菜单

        使用 Solr 构建企业级搜索服务器
  3. 中文分词器ik-analyzer

    为了更好的支持中文分词,我们此处引入ik分词器.

    1. 可通过maven仓库下载最新的ik分词器的jar包. https://search.maven.org/search?q=com.github.magese , 并将其放在server\solr-webapp\webapp\WEB-INF\lib 目录下.
    2. 修改server\solr\icvip\conf\managed-schema配置,添加一个fieldType启用ik分词器.
<fieldType name="text_ik" class="solr.TextField">
           <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
    1. 重启Solr服务,并尝试在 Analysis 中选择 text_ik 测试是否生效,如下所示

      使用 Solr 构建企业级搜索服务器
  1. 从数据库导入数据源
    1. 有了以上的配置后, 我们的搜索库已经准备好了,接下来就该往其添加索引数据了.当然你可以添加其支持的各种数据格式, 如 documents 菜单下的 Document Type 所列.本处介绍另外一种形式的数据源,即直接从数据库导入数据.在正式导入之前,我们先简单介绍一下导入数据的内容,本文以一个物料及其规格参数列表为例, 其关系为 1物料:n规格参数 , 数据量大概为 物料表 638 万条, 参数规格表 7169万条, 数据库文件约为15G左右.

      使用 Solr 构建企业级搜索服务器
    2. 前文已说, Solr 是基于 java 平台下的产物, 需要下载对应的驱动来支持数据库连接,其中 sqlserver 可通过 https://docs.microsoft.com/zh-cn/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017 下载对应的jar包,mysql 对应下载地址为 https://www.mysql.com/products/connector/ .
    3. 在Core目录下,新建 lib 文件夹,将solr-dataimporthandler 和 数据库连接驱动 jar包拷贝到此目录.

      使用 Solr 构建企业级搜索服务器

    4. 添加Dataimport 支持, server\solr\icvip\conf\solrconfig.xml 添加 requestHandler , 注意如果有其他的 name=”/dataimport” 节点,请将其移除.,其中的 <str name=”config”>节点即为导入数据源的配置文件

      <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
          <lst name="defaults">
            <str name="config">data-config.xml</str>
           </lst>
        </requestHandler>
      
    5. 在当前目录下新建 data-config.xml文件, 如下所示

      <?xml version="1.0" encoding="UTF-8"?> 
      <dataConfig>  
          <!--mysql数据源-->
          <!--<dataSource type="JdbcDataSource"   
                    driver="com.mysql.jdbc.Driver"   
                    url="jdbc:mysql://localhost:3306/icvip_material?characterEncoding=utf8&useSSL=false"   
                    user="root"   
                    password="123456"/>  -->
          <!--sqlserver 数据源-->              
          <dataSource type="JdbcDataSource"   
                    driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
                    url="jdbc:sqlserver://localhost:1433;DatabaseName=icvip_material"   
                    user="sa"   
                    password="123456"/> 
                    
          <document name="Products">
              
              <!--产品实体-->
              <entity name="Product" dataSource="dataSource" pk="ProductId"
                  query="SELECT * FROM Product"> 
                  <field column="ProductId" name="ProductId" />
                  <field column="CategoryId" name="CategoryId" />
                  <field column="PN" name="PN" />
                  <field column="Brand" name="Brand" />
                  <field column="Describe" name="Describe" />
                  <field column="ImageBigUrl" name="ImageBigUrl" />
                  <field column="ImageSmallUrl" name="ImageSmallUrl" />
                  <field column="DataSheetURL" name="DataSheetURL" />
                  <field column="Series" name="Series" />
                  <field column="ProductFamily" name="ProductFamily" />
                  <field column="CategoryName" name="CategoryName" />
                  <field column="PageUrl" name="PageUrl" />    
                  
                  <!--产品规格实体,关系为1产品:n产品规格-->
                  <entity name="Product_Spec"  pk="SpecificationsId"
                      query="SELECT [Key],[Value] FROM specifications WHERE ProductId='${Product.ProductId}'"> 
                      <field column="Key" name="ProSpecKey" /> 
                      <field column="Value" name="ProSpecValue" /> 
                  </entity>
              </entity>
          </document>
      </dataConfig>
      
    6. 配置server\solr\icvip\conf\managed-schema,以确认使用的分词规则

      使用 Solr 构建企业级搜索服务器

      至于配置的含义,可参考 https://wiki.apache.org/solr/DataImportHandler

    7. 导入数据,切换到Dataimport 菜单, 选中实体导入. 接下来就是漫长的等待过程....

      使用 Solr 构建企业级搜索服务器
  2. 常用查询参数介绍, 重点需要关注 q/ fq/ hl/start/rows 几个参数. 可使用Query菜单进行测试.

    使用 Solr 构建企业级搜索服务器

后记: 经过以上步骤后,我们的Solr应用就基本结束. 不过因Solr作为一个企业级的搜索产品,功能原不止于此,文中并没有涵盖完全Solr的操作, 如关于增量索引设置问题,各位如果有需要可以在此基础上继续深入研究,附上Solr官网介绍的详细地址. https://wiki.apache.org/solr/


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Inside Larry's and Sergey's Brain

Inside Larry's and Sergey's Brain

Richard Brandt / Portfolio / 17 Sep 2009 / USD 24.95

You’ve used their products. You’ve heard about their skyrocketing wealth and “don’t be evil” business motto. But how much do you really know about Google’s founders, Larry Page and Sergey Brin? Inside......一起来看看 《Inside Larry's and Sergey's Brain》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具