solr8学习

一: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文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章