先来谈谈本人奋战3天趟过的坑
- 版本选择问题:
第一次入坑,选择的是JDK1.8+tomcat8.5+solr6.6,网上搜索各种教程,最后给我来了个JDK版本不匹配。这不是逗我呢!
第二次入坑,果断降低solr的版本,选择的是,JDK1.8+tomcat8.5+solr4.10.0,最终又是以失败告终,具体原因没搞明白!
第三次尝试,按照网上的说法,抛弃tomcat,最终选择的是JDK1.8+solr4.10.0,完美运行。(感谢以下网址提供的帮助http://www.cnblogs.com/luxiaoxun/p/4442770.html) - 资源下载问题:集成过程中,到处寻找资源,浪费了很多时间,因此楼主汇总了下本次集成所需要的所有资源。点我下载所有资源
目录
- 基础solr功能部署
- solr与mysql数据库集成
- 全局搜索,模糊查询(实现类似淘宝的搜索框)
- 按照距离(经纬度)远近排序功能的实现
- solr与java的集成,springboot系统查询solr数据
基础solr功能部署
- 在网上下载solr4.10.0版本
- 解压至本地文件夹(楼主的位置是C:\D\solr)
- cmd进入 C:\D\solr\solr-4.10.0\example,执行java -jar start.jar
- 访问http://localhost:8983/solr (到此完美部署成功)
连接mysql数据库
1.修改C:\D\solr\solr-4.10.0\example\solr\collection1\conf\solrconfig.xml
在《requestHandler name=”/select” class=”solr.SearchHandler”》前面上加上一个dataimport的处理的Handler
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
2 在同目录下添加data-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/chuangzzhl"
user="root"
password="123456"
batchSize="-1"/>
<document>
<entity name="t_zzhl_wx_user_info" pk="wx_user_info_id"
query="select wx_user_info_id,country,city,province, gender,language,nick_name,user_no,BIRTH_YEAR from t_zzhl_wx_user_info"
deltaImportQuery="select wx_user_info_id,country,city,province, gender,language,nick_name,user_no, BIRTH_YEAR from t_zzhl_wx_user_info where id='${dataimporter.delta.wxUserInfoId}'"
deltaQuery="select wx_user_info_id,country,city,province, gender,language,nick_name,user_no, BIRTH_YEAR from t_zzhl_wx_user_info where to_char(update_time,'yyyy-mm-dd hh24:mi:ss')> '${dataimporter.last_index_time}'">
<field column="wx_user_info_id" name="wxUserInfoId"/>
<field column="country" name="country"/>
<field column="city" name="city"/>
<field column="province" name="province"/>
<field column="gender" name="gender"/>
<field column="language" name="language"/>
<field column="nick_name" name="nickName"/>
<field column="user_no" name="userNo"/>
<field column="BIRTH_YEAR" name="birthYear"/>
</entity>
</document>
</dataConfig>
说明:
dataSource是数据库数据源。
Entity就是一张表对应的实体,pk是主键,query是查询语句。
Field对应一个字段,column是数据库里的column名,后面的name属性对应着Solr的Filed的名字。
3修改同目录下的schema.xml,这是Solr对数据库里的数据进行索引的模式(添加索引字段:这里每个field的name要和data-config.xml里的entity的field的name一样,一一对应。)
备注:第一行的“id”是solr默认的主键字段,且类型是string类型,单和我的模型不一样咋办?楼主的id是“wxUserInfoId”,且是Long类型。
修改方法,注释掉默认的id,新增一行“wxUserInfoId”,修改uniqueKey标签的值为“wxUserInfoId”
<uniqueKey>wxUserInfoId</uniqueKey>
<!--
<uniqueKey>id</uniqueKey>
<field name="id" type="String" indexed="true" stored="true" required="true" multiValued="false" />
-->
<field name="wxUserInfoId" type="tlong" indexed="true" stored="true" required="true" multiValued="false" />
<field name="country" type="string" indexed="true" stored="true" />
<field name="city" type="string" indexed="true" stored="true" />
<field name="province" type="string" indexed="true" stored="true" />
<field name="gender" type="string" indexed="true" stored="true" />
<field name="language" type="string" indexed="true" stored="true" />
<field name="nickName" type="string" indexed="true" stored="true" />
<field name="userNo" type="string" indexed="true" stored="true" />
<field name="birthYear" type="string" indexed="true" stored="true" />
4 修改同目录下的elevate.xml(备注:如果修改主键类型,才需要做这一步,否则可以跳过)
注释掉下面两行
<doc id="MA147LL/A" />
<doc id="IW-02" exclude="true" />
5 拷贝mysql-connector-java-5.1.22-bin.jar和solr-dataimporthandler-4.10.0.jar和solr-dataimporthandler-extras-4.10.0.jar到C:\D\solr\solr-4.10.3\example\solr-webapp\webapp\WEB-INF\lib。一个是mysql的java驱动,另两个在C:\D\solr\solr-4.10.0\dist目录里,是org.apache.solr.handler.dataimport.DataImportHandler所在的jar。
6 重启Solr。如果配置正确就可以启动成功。
全局搜索,模糊查询(实现类似与淘宝的搜索框)
1.模糊查询是利用分词器去做的
2下载分词器所需jar包(IKAnalyzer2012FF_u1.jar),将jar包放入C:\D\solr\solr-4.10.0\example\solr-webapp\webapp\WEB-INF\lib
3 修改C:\D\solr\solr-4.10.0\example\solr\collection1\conf\schema.xml文件
楼主这边选择gender和nickName这两个字段作为查询条件,这两个字段是在之前新加的。修改了type的值
searchKeywords是自己随意定义的一个名字,只要不和已经存在的字段重名就可以,用于后面模糊查询时的参数key
<!-- 修改 -->
<field name="gender" type="text_ik"