/search-solr

A sample code for solr.

Primary LanguageJavaMIT LicenseMIT

search-solr

A sample code for solr. Development based on SpringBoot.

jdk solr
1.8 7.7.2
一、文件结构
search-solr
  |- README.md 
  |- doc
      |- database  (项目数据库文件)
      |- img       (效果截图)
      |- config    (solr配置文件)
      |- static    (项目静态文件)
  |- src
  |- pom.xml

solr的安装参考下文附录I,现假设大家的solr环境是正常的。

二、项目配置

1、将项目中的数据库文件导入数据库

2、新建一个solr core(我的solr core命名为search)并设置好需要的分词器(参考附录II)

3、因为本项目使用了solr自带的分词器和ik分词器,所以两种分词器都需要配置

4、我使用的solr的配置文件在doc/config文件夹下,可参考配置

5、导入数据库文件到solr中,可在solr后台测试下

6、solr数据正常后可以启动SpringBoot项目了

7、没有什么太大的问题,项目应该可以正常运行了

三、运行测试

1、默认页面效果

default

2、关键字查询效果

image1

3、类目价格筛选效果

iamge3

image4

4、价格、上架时间、更新时间排序效果

image5

四、附录
  • 附录I 安装solr(version 7.7.2)

1、solr安装包下载

2、解压下载的压缩包

3、进入解压后的目录,执行命令:bin/solr start ,看到以下内容就证明solr启动成功了

Started Solr server on port 8983 (pid=65295). Happy searching!

4、在浏览器访问:localhost:8983,会出现以下页面:

solr_ok

5、solr安装完成(需要将solr服务移到tomcat启动的可以自行查找相关资料)

  • 附录II 新建solr core并配置中文分词器

1、新建solr core

​ 每个solr实例都是solr的一个核心,一个solr服务可以创建多个核心,每个核心都可以进行自己独立配置。

​ 先进入solr的解压目录下,然后进入server/solr,新建文件夹,该文件夹名称将与之后创建的solr core名称相同。将该目录下configsets/_default目录内的conf拷贝到上面新建的文件夹内。

(1)、solr管理后台新建core

new_core

(2)、solr命令新建core

进入solr安装目录:输入命令 bin/solr create –c core_name

2、配置中文分词器

(1)、配置solr自带的分词器

A、在solr的解压目录下有个dist目录,将其中的solr-analysis-extras-7.7.2.jarsolr-analytics-7.7.2.jar复制到解压目录/server/solr-webapp/webapp/WEB-INF/lib 下;

B、进入创建的core文件夹,修改其conf/managed-schema文件,添加内容:

<fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
  	<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
  </analyzer>
  <analyzer type="query">
  	<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
  </analyzer>
</fieldType>

C、重启服务,进入solr后台测试下分词效果:

text_cn

(2)、配置ik分词器

A、下载中文分词器IKAnalyzer,下载地址

B、解压下载的压缩包( ext.dic可自定义分词 ),目录如下:

ik

C、将两个jar包复制到solr解压目录/server/solr-webapp/webapp/WEB-INF/lib目录下,将三个配置文件复制到solr解压目录/server/solr-webapp/webapp/WEB-INF/classes目录下,如果没有classes文件夹就新建。

D、进入创建的core文件夹,修改其conf/managed-schema文件,添加内容:

<fieldType name="text_ik" class="solr.TextField">
  <analyzer type="index">
	  <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
	  <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
	  <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
	  <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

E、重启服务,进入solr后台测试下分词效果:

text_ik

  • 附录III 将mysql数据导入solr

1、将mysql驱动( 我用的是mysql-connector-java-5.1.46.jar )复制到solr解压目录/server/solr-webapp/webapp/WEB-INF/lib目录下,因为要使用dataimport功能,所以需要将solr解压目录/distsolr-dataimporthandler-7.7.2.jarsolr-dataimporthandler-extras-7.7.2.jar复制到解压目录/server/solr-webapp/webapp/WEB-INF/lib 下;

2、进入创建的core文件夹,在其conf文件夹内创建data-import.xml文件,文件内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/product" user="root" password="root"/>
    <document>
        <entity name="product" query="select p.id,p.title,p.sell_point,p.price,c.name,d.desc,p.created,p.updated from product p,category c,description d where p.cid=c.id and p.id = d.pid">
            <field column="id" name="id"/>
            <field column="title" name="prod_title"/>
            <field column="sell_point" name="prod_sell_point"/>
            <field column="price" name="prod_price"/>
            <field column="name" name="prod_category"/>
            <field column="desc" name="prod_desc"/>
            <field column="created" name="prod_created"/>
            <field column="updated" name="prod_updated"/>
        </entity>
    </document>
</dataConfig>

3、修改conf文件夹内的managed-schema文件,做好字段的映射,添加的内容如下:

<field name="prod_title" type="text_ik" indexed="true" stored="true" multiValued="true"/>
<field name="prod_sell_point" type="text_cn" indexed="true" stored="true"/>
<field name="prod_price" type="pint" indexed="true" stored="true"/>
<field name="prod_category" type="string" indexed="true" stored="true" />
<field name="prod_desc" type="text_cn" indexed="true" stored="true"/>
<field name="prod_created" type="pdate" indexed="true" stored="true"/>
<field name="prod_updated" type="pdate" indexed="true" stored="true"/>

managed-schema文件里一些常用的字段已做好映射,例如id,所以我们就不必重复去声明id字段了(重复了会报错)。

4、修改conf文件夹内的solrconfig.xml文件,引入第2步创建的data-import.xml文件:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  <lst name="defaults">
    <str name="config">data-import.xml</str>
  </lst>
</requestHandler>

5、重启solr服务,进入solr后台导入数据

data-execute

6、测试数据是否导入成功

query