一:Solr简介
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Solr是一个高性能,采用Java5开发,
Solr
基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎
二:Solr服务器的搭建
步骤:
(1)从solr官网下载http://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/8.0.0/solr-8.0.0.tgz下载
(2)配置java环境变量,jdk8
(3)解压下载的压缩包
进入bin目录
启动之后localhost:8983进入管理页面
点击coreadmin进入创建核心的页面
点击addCore之前,首先要在 solr文件夹下创建和instanceDir同名的文件夹
同时把solr-8.0.0\server\solr\configsets\_default下的conf文件夹拷贝到新建的new_core文件夹下,然后点击addcore,则新建成功。
在solr管理页面的coreselector中就可以找到新建new_core核心。
三:Solr服务器配置中文分词器
步骤:
(1)拷贝中文分词器ik-analyzer-solr5-5.x.jar到server\solr-webapp\webapp\WEB-INF\lib文件夹下
(2)在Solr中的server\solr-webapp\webapp\WEB-INF下面创建classes文件目录,用于存放中文分词器的分词配置
ext.dic的内容,比如如下:
高富帅
黑马程序员
二维表
这样的话,碰到这样的词就不会进行拆分了,所以,一些网络新词就可以在这里进行配置。
IKAnalyer.cfg.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>
stopwords.dic内容:
我
是
的
a
an
and
are
as
这样的话,对于上面的字就不会进行显示处理了,因为这些都是没有意义的词汇。
(3)在核心solr家中,找到配置文件schema.xml,添加中文分词器的配置。
添加如下内容:
<!--配置中文分词器-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<!--配置几个域,这几个就支持中文分词了,当然自己根据需求进行创建即可-->
<field name="title_ik" type="text_ik" indexed="true" stored="true"/>
<field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/
(4)重启solr start,进行测试是否配置完成。
(5)访问Solr主页,进行测试
四:Solr导入数据
(1)增加jar包,在server\solr\new_core\文件夹下创建lib包,把
放进去
(2)创建配置文件
在server\solr\new_core\conf 中创建data-config.xml文件,
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8"
user="root"
password="admin"/>
<document>
<entity name="product" query="SELECT id,name FROM product">
<field column="id" name="id" />
<field column="name" name="name" />
</entity>
</document>
</dataConfig>
把data-config.xml配置到solrconfig.xml中,
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
(3)导入数据,
重新启动solr,在管理页面
entity中就是配置对象。
点击execute按钮把数据库中数据导入到solr服务器中。可以勾选auto-refresh status进行实时处理。
至此导入数据完成
进行测试,但是发现一个问题,就是那么没有出来,只有id。
最后发现了,原来是我在date-config.xml中配置了name这个字段,在managed-schema没有配置
<field name="name" type="string" indexed="true" stored="true" required="true" multiValued="false" />
加上这句,最后测试正常了。后来发现这样配置还是有问题,不能检索,如果我name的值是中国人在西边中的瓜,我用中国人来检索却检索不出来,后来发现
<field name="name" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />
中的type应该是中文分词类型。
对于java编程部分,参考上一遍solr文章