Lucene&Solr学习笔记之三Solr搭建及使用

1649

3. Solr搭建及使用

3.1 Solr下载

官网:

htpp://lucene.apache.org

![下载首页](在这里插入图片描述

3.2 solr配置

3.2.1 配置solr与tomcat整合:

  1. 下载一个干净的tomcat:
官网:http://tomcat.apache.org
下载:apache-tomcat-8.5.38
jdk:1.8
  1. 将下载好的solr7.7.1解压缩
    在这里插入图片描述

  2. solr-7.7.1\server\solr-webapp\路径下的webapp改名为solr后拷贝到apache-tomcat-8.5.38\webapps\路径下

  3. solr-7.7.1\server\lib\ext路径下的所有jar包拷贝到apache-tomcat-8.5.38\webapps\solr\WEB-INF\lib
    在这里插入图片描述

  4. solr-7.7.1\server\lib下的以metrics-开头和gmetrics-开头的jar包拷贝到apache-tomcat-8.5.38\webapps\solr\WEB-INF\lib
    在这里插入图片描述

  5. apache-tomcat-8.5.38\webapps\solr\WEB-INF目录下建立一个classes文件夹用于存放log4j.properties的配置文件记录日志

  6. 复制solr-7.7.1\server\resources目录下的log4j2.xml配置文件到apache-tomcat-8.5.38\webapps\solr\WEB-INF\classes下。
    在这里插入图片描述
    然后打开log4j2.xml配置日志的存放路径:
    在这里插入图片描述

3.2.2 配置solr的家目录

  1. 选一个目录存放solrhome目录我的建立在和tomcat存放目录的同级,新建一个solrhome文件夹作为solr的home目录
    solr_home

  2. solr-7.7.1\server\solr目录下的所有文件及文件夹拷贝到solrhome文件夹中,在将contribdist两个文件夹复制到solrhome
    solr_dist文件

得到:
solr_home目录结构

  1. 在tomcat的solr工程文件夹的web.xml中即apache-tomcat-8.5.38\webapps\solr\WEB-INF下的web.xml中声明solrhome的位置:增加一行如下:
<env-entry>
    <env-entry-name>solr/home</env-entry-name>
    <!-- 写自己创建的solrhome的位置-->
    <env-entry-value>F:/solr/solorhome</env-entry-value>
    <env-entry-type>java.lang.String</env-entry-type>
 </env-entry>

然后注释到web.xml中的如下配置:

  <!-- Get rid of error message -->
<!-- 
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Disable TRACE</web-resource-name>
      <url-pattern>/</url-pattern>
      <http-method>TRACE</http-method>
    </web-resource-collection>
    <auth-constraint/>
  </security-constraint>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Enable everything but TRACE</web-resource-name>
      <url-pattern>/</url-pattern>
      <http-method-omission>TRACE</http-method-omission>
    </web-resource-collection>
  </security-constraint>
-->

到这里solr配置就结束了,然后启动tomcat服务器访问

http://localhost:8080/solr/index.html

可以看到首页
solr管理首页

注意:如果tomcat无法通过startup.bat启动,看到界面一闪而过,则需要配置JRE的环境变量:
JRE环境变量
其中变量值为你安装java的目录的jre文件夹的路径

然后在Path环境变量中加入一行:

%JRE_HOME%\bin

就可以启动了。

3.3 solr创建Core

solr的Core就是Solr存放数据或者说是索引的地方,本质是一个文件夹,位置在solr的home目录下。

在solr管理首页点击Core Admin
solr_core创建.png
然后点击Add Core
solr_core的addcore介绍.png)
点击Add Core,我们认为会在core home路径下,创建了一个名为coreTest的文件夹并完成core的创建,然而并不是。
solr_addcore_error.png
报错了,上方红色报错信息中指出的路径即为core home路径(由于上面两张图是盗来的所以看到版本和路径不对,但是不影响),就是我们刚刚创建的solrhome文件夹

找到solrhome文件夹在里面会发现只有coreTest文件夹是一个空的,core并未成功创建,因为我们缺少solrconfig.xml,将之前复制到solrhome中的solorhome\configsets\_default文件夹 下的conf文件夹复制到

coreTest文件夹下,再次回到首页点击Add Core核就创建成功了。
solr_core创建.png
点击Core Selector可以选择创建的Core查看具体信息
core selector选择core.png
点击schema可以添加域:
在这里插入图片描述
涉及到的域的类型就域Lucene一致了,这里不再赘述。

界面中的一些菜单介绍:

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

  2. Logging Solr

    运行日志信息。

  3. Cloud
    Cloud 即 Solrdoud,即Sor云(集群),当使用Solr Cloud模式运行时会显示此菜单,如下图是Solr Cloud的管理界面:

  4. Core Admin
    Solr Core的管理界面。Solr Core是Solr的一个独立运行实例单位,它可以对外提供索引和搜索服务,一个Solr工程可以运行多个Solrcore(Solr实例),一个Core 对应一个索引目录。
    添加solrcore:
    第一步:复制 collection1改名为collection2第二步:修改core.properties。name=collection2第三步:重启tomcat

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

  6. Tread Dump
    显示SolrServer中当前活跃线程信息,同时也可以跟踪线程运行栈信息。

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

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

  9. Document.
    通过此菜单可以创建索引、更新索引、删除索引等操作。

3.4 配置IK中文分词器

3.4.1 Managed-schema介绍

Managed-schema,在Solr创建的Core的conf目录下如:solorhome\collection1\conf,它是Solr数据表配置文件,它定义了加入索引的数据的数据类型的。主要包括Fieldlypes、Fields和其他的一些缺省设置。
核很重要的两个配置文件.png

3.4.2 安装IK中文分词器

第一步:把IK-Analyzer-7.2.1.jar添加到apache-tomcat-8.5.38\webapps\solrsolr\WEB-INF\ib目录下。

第二步:复制IKAnalyzer的配置文件和自定义词典和停用词词典到apache-tomcat-8.5.38\webapps\solr\WEB-INF\classes下。

第三步:配置Core的managed-schema文件solorhome\collection1\conf

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

<field name="content_ik" type="text_ik" indexed="true" stored="false"/>

保存,重启tomcat就可以使用IK分词器

solr管理页面选择核然后选择analysis就可以查看分词效果了
ik分词器使用示例.png

3.5 批量导入数据

使用dataimport插件批量导入数据。
第一步:把dataimport 插件依赖的jar包添加到solrcore中路径:collection1\lib(collection1时核名称,没有lib文件夹需要创建一个)中。
在这里插入图片描述
还需要连接mysql数据库所以导入mysql的驱动包mysql-connector-java-5.1.46-bin.jar

第二步:配置核的核心配置文件solrconfig.xml(目录:solorhome\collection1\conf),在其中添加一个requestHandler

<!-- 配置导入数据的requestHandler -->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
        <str name="config">data-config.xml</str>
    </lst>
</requestHandler>

配置中涉及到data-config.xml配置文件用于存放数据库连接信息,在solrconfig.xml同级目录下创建一个data-config.xml
data-config配置文件.png
然后配置上:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
	<dataSource type="JdbcDataSource"
		driver="com.mysql.jdbc.Driver"
		url="jdbc:mysql://localhost:3306/lucene"
		user="root"
		password="123456"/>
	
	<document>
		<entity name="product" query="SELECT pid, name, catalog, price, picture, shop_name, market_time FROM product">
			<field column="pid" name="id"/>
			<field column="name" name="product_name"/>
			<field column="catalog" name="product_catalog"/>
			<field column="price" name="product_price"/>
			<field column="picture" name="product_picture"/>
			<field column="shop_name" name="product_shop_name"/>
			<field column="market_time" name="product_market_time"/>
		</entity>
	</document>
</dataConfig>

导入lucene.sql即可建表。

由于将数据库字段映射为solr域而solr中没有定义这些域,所以就需要手动配置。

下面就来说明关于设置业务系统Field。

3.5.1 设置业务系统Field

如果不使用Solr提供的Field 可以针对具体的业务需要自定义一套Field,如下是商品信息Field:

<-- product,在solr7中float,double之类的都是系统自带pfloat,pdouble -->
<field name="product_name" type="text_ik" indexed="true" stored="true"/>
<field name="product_price" type="pfloat" indexed="true" stored="true"/>
<field name="product_picture" type="string" indexed="false" stored="true"/>
<field name="product_catalog" type="text_ik" indexed="true" stored="true"/>
<field name="product_shop_name" type="text_ik" indexed="true" stored="true"/>

<field name="product_keywords" type="text_ik" indexed="true" stored="false"
multiValued="true"/>
    
<copyField source="product_name" dest="product_keywords"/>
<copyField source="product_catalog" dest="product_keywords"/>
<copyField source="product_shop_name" dest="product_keywords"/>

其中product_keywords是新增加的一个多值域,而copyField则是用于拷贝,将product_name,product_catalog,product_shop_name拷贝到product_keywords域中,这样在搜索的时候就不需要分别搜索那三个域,而是直接搜索product_keywords一次就可以返回搜索结果,提高搜索速度。

将上面的配置文件复制到核的managed-schema配置文件中(solorhome\collection1\conf\managed-schema):
在这里插入图片描述
配置好这些以后,重启服务器会可以打开dataimport

3.5.2 导入数据

从数据库导入数据.png