• 04——Solr学习之项目中使用solr


    借鉴博客:https://blog.csdn.net/kisscatforever/article/details/76744768

    完全可以跟着他这个来,清晰明了。

     

     

    一、来说说怎么使用solr这玩意

      上一篇博客说了怎么安装配置,已经安装成功了solr,并在linux上启动了solr服务,在浏览器上也打开了solr的管理界面

     

      现在要把solr整合到项目中来使用》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

     

      怎么用solr,想要使用solr必需要在solr的目录下创建一个core目录,上篇已经创建好了,没错就是他:/usr/local/solrhome/ 这个目录下的collection目录就是solr的core

      

     

      下一步:要在collection/conf/目录下的managed-schema文件配置一下  (我使用的solr是7.4版本,网上说其他低版本的是叫schema文件)

     

      vi managed-schema 文件 配置内容如下:

    #这个是配置ikanlyzer中文分词器,这玩意不要用4.0版本,我开始用了4.0版本然后遇到了坑:iKAnalyzer-7.x版本下载地址:https://search.maven.org/search?q=com.github.magese
    <fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>



    #这个是配置建立索引库的字段

    <field name="item_title" type="text_ik" indexed="true" stored="true"/>
    <field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
    <field name="item_price" type="plong" indexed="true" stored="true"/>
    <field name="item_image" type="string" indexed="false" stored="true" />
    <field name="item_category_name" type="string" indexed="true" stored="true" />
    <field name="item_desc" type="text_ik" indexed="true" stored="false" />

    <field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
    <copyField source="item_title" dest="item_keywords"/>
    <copyField source="item_sell_point" dest="item_keywords"/>
    <copyField source="item_category_name" dest="item_keywords"/>
    <copyField source="item_desc" dest="item_keywords"/>

    截图如下:

       关于配置ikanlyzer中文分词器,把ikanlyzer的jar下载后,上传到:

        cd /usr/local/dev/tomcat/tomcat01/apache-tomcat-8.5.40/webapps/solr/WEB-INF/lib/ 目录下

     

     》》》》》》在linux上配置好后然后,开始在项目中整合solr》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

     

    导入solrj的jar包

      1.1、导入依赖包

    <!-- solr客户端 -->
    <dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    </dependency>

     

      1.2、solrj是干嘛用的?就像我们用redis但在java用jedis来连接redis一样,solrj是用来操作solr服务的。

     

     

     

     

     2、创建一个SSM项目,在xml配置文件里配置一下注入solrj

    <!-- 单机版solr客户端 -->
        <bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
           <!--  构造方法 -->
            <constructor-arg name="baseURL" value="http://192.168.2.120:8081/solr/collection"/>
        </bean> 
    
        <!-- 集群版solr客户端 -->
        <!-- <bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
            <constructor-arg name="zkHost" value="192.168.137.13:2181,192.168.137.13:2182,192.168.137.13:2183"></constructor-arg>
            <property name="defaultCollection" value="collection2"></property>
        </bean>-->

     

     

    3、在service业务层,从数据库里把数据取出来,然后通过solrj,把数据传到solr服务里

    package com.taotao.search.service.impl;
    
    import java.util.List;
    
    import org.apache.solr.client.solrj.SolrServer;
    import org.apache.solr.common.SolrInputDocument;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.taotao.common.pojo.TaotaoResult;
    import com.taotao.search.dao.ItemMapper;
    import com.taotao.search.pojo.Item;
    import com.taotao.search.service.ItemService;
    
    @Service
    public class ItemServiceImpl implements ItemService {
    
        //services配置文件已经配置并注入了SolrServer类,可直接用SolrServer类来操作solr服务
        @Autowired
        private SolrServer solrService;
        
        @Autowired
        private ItemMapper itemMapper;
        
        
        @Override
        public TaotaoResult importItems() throws Exception {
            
            //查询数据库获取商品列表
            List<Item> itemList = itemMapper.getItemList();
            
            //把商品list数据写入solr
            for(Item item : itemList){
                //创建文档对象
                SolrInputDocument document = new SolrInputDocument();
                
                //添加域
                document.addField("id", item.getId());
                document.addField("item_title", item.getTitle());
                document.addField("item_sell_point", item.getSell_point());
                document.addField("item_price", item.getPrice());
                document.addField("item_image", item.getImage());
                document.addField("item_category_name", item.getCategory_name());
                document.addField("item_desc", item.getItem_des());
                
                //写入索引库
                solrService.add(document);
                
            }
            
            //提交
            solrService.commit();
            return TaotaoResult.ok();
        }
    
    }

     

     

     》》》》》》所有代码都准备好了,开始测试》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

     

     

    linux启动tomcat时,报错:Unknown fieldType 'long' specified on field item_price 

     

     操作如下:借鉴博客:https://blog.csdn.net/sms15732621690/article/details/79221986

     

    1、启动linux上的tomcat,浏览器打开solr的管理界面

    2、启动本地SSM项目,在浏览器上输入controller接口的地址:http://192.168.2.59:8083/taotao-search/item/importall

      controller这个接口随便写,主要是为了调用service业务层,拿到数据,把数据传到solr上

     

     然而。。。。。java项目取数据往solr服务一丢,你以为就好?又报了个这个:

      什么原因:网上说分词器ikanalyzer的版本太低了,所以解决如下,版本下载地址:https://search.maven.org/search?q=com.github.magese

      借鉴博客:https://blog.csdn.net/guyan0319/article/details/81188977

      

     

     

    最后再重启一遍:哦鸡巴K

      数据成功导入solr

     

     solr的UI管理上查看:成功如下

     

     

     

    。。。

  • 相关阅读:
    MySQL之Web乱码问题
    MySQL之表操作
    Python学习笔记调式之抛出异常
    Python学习笔记调试之取得反向跟踪的字符串
    MySQL之库操作
    C#基础 冒泡排序
    C#基础 数组、二维数组
    C#基础 类及常用函数【string 、Math 、DiteTime 、TimeSpan】
    C#基础 异常语句 、跳转语句、while循环、穷举法、迭代法
    C#基础 循环语句【for】
  • 原文地址:https://www.cnblogs.com/spll/p/10796310.html
Copyright © 2020-2023  润新知