• springboot整合solr


    springboot整合solr

    搭建solr服务器 solr就相当于是一个数据库

    第一步:创建一个空的文件夹testsolr,为了方便管理tomcat、solr以及solr的数据源管理;
    在这里插入图片描述

    第二步、安装下载Tomcat8.5.9、solr8.1.1,并创建一个空的文件夹solrHome(solr 数据源)
    solr8.1.1下载地址https://lucene.apache.org/solr/guide/8_1/installing-solr.html 一般下载zip格式就行
    第三步:把solr-8.1.1安装包中的server→solr-webApp→webApp下的文件拷贝一份到apache-tomcat-8.5.9→webApp下创建的solr文件夹中:
    在这里插入图片描述
    在这里插入图片描述
    第四步:将solr-8.1.1安装包中的server→ext 文件夹下的jar、server文件夹下的jar文件、拷贝到tomcat→webApp→solr→WEB_INF→lib文件夹中(网上很多教程一般只会拷贝server→ext 文件夹下的jar但是启动tomcat并访问时会报404。个人建议全拷)
    在这里插入图片描述
    第五步:配置apache-tomcat-8.5.9→webApp→solr→WEB_INF下的web.xm
    1、添加配置(指定solr数据源的位置):

      <!--配置solr 数据源-->
    	<env-entry>  
             <env-entry-name>solr/home</env-entry-name>  
             <env-entry-value>D:	estsolrsolrHome</env-entry-value>  
             <env-entry-type>java.lang.String</env-entry-type>  
        </env-entry>
    
    

    2、注释一下配置(目的是防止tomcat 403问题)

     <!-- Get rid of error message -->
     <!-- <security-constraint>
        <web-resource-collection>
          <web-resource-name>Disable TRACE</web-resource-name>
          <url-pattern>/</url-pattern>
          <http-method>TRACE</http-method>
        </web-resource-collection>
        <auth-constraint/>
      </security-constraint>
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>Enable everything but TRACE</web-resource-name>
          <url-pattern>/</url-pattern>
          <http-method-omission>TRACE</http-method-omission>
        </web-resource-collection>
      </security-constraint>-->
    

    第六步:把solr-8.1.1安装包中的server→resources文件下的配置文件拷贝到apache-tomcat-8.0.47→webApp→solr→WEB_INF→classes文件夹下(如果没有classes文件夹,请先创建)
    在这里插入图片描述
    在这里插入图片描述
    需要分别修改log4j2的两个配置文件,需要把所有${sys:solr.log.dir}修改为自己的指定的真是路径。
    在这里插入图片描述
    ${sys:solr.log.dir}本机存放solr日志的文件夹
    第七步:启动tomcat,访问 http://localhost:8080/solr/index.html验证是否配置成功。
    完了有可能报404是因为jar不全
    在这里插入图片描述
    Solr server lib 和ext的jar都需要拷到tomcat solr web-inf lib下面
    **

    sorl搭建成功操作solrweb端

    **

    第一步创建solrCore
    目前solrHome目录是空的,我们创建一个空文件夹core1,这个就是我们的一个域(相当于项目对应的库),然后把solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/ 这个文件复制到solrHome/core1中。
    在这里插入图片描述
    在这里插入图片描述
    把solr5.5/server/solr/solr.xml复制到solrHome目录下。
    第二步在solr的管理控制台界面,添加一个core1
    在这里插入图片描述
    这下就创建成功了一个域core1 请注意我打码的部分,需要先执行第一步创建solrCore操作,否则的话,会无法创建solr core,也就是会有错误信息,这是solr的一个bug,但是至今没有修复
    第三步 准备好ik分词器的jar包,可以自己编译,也可以下载我生成的。
    然后把它复制到tomcat/webapp/solr/WEB-INF/lib里面。(千万不要复制到tomcat/lib中,这样会找不到lucene的类)
    打开solrHome/core1/conf/managed-schema文件,在最下方,追加如下配置

    <fieldType name="text_ik" class="solr.TextField">
        <analyzer type="index" useSmart="false"
            class="org.wltea.analyzer.lucene.IKAnalyzer" />
        <analyzer type="query" useSmart="true"
            class="org.wltea.analyzer.lucene.IKAnalyzer" />
    </fieldType>
    

    启动tomcat,即可看到text_ik分词
    在这里插入图片描述
    中文分词器安装成功

    第四步配置自定义字段域 这个相当于数据库中的字段

    	<!--自定义字段域-->
        <field name="typeName"  type="string" indexed="true" stored="true"  multiValued="false"/>
    	<field name="docName"  type="text_ik" indexed="true" stored="true"  multiValued="false"/>
    	<field name="introduction"  type="text_ik" indexed="true" stored="true"  multiValued="false"/>
    	<field name="keyPackage"  type="text_ik" indexed="true" stored="true"  multiValued="false"/>
    	<field name="uploadBy"  type="text_ik" indexed="true" stored="true"  multiValued="false"/>
    	<field name="uploadTime"  type="text_ik" indexed="true" stored="true"  multiValued="false"/>
    	<field name="downloadNumber"  type="plong" indexed="true" stored="true"  multiValued="false"/>
    	<field name="writeDate"  type="pdate" indexed="true" stored="true"  multiValued="false"/>
    	<field name="jh"  type="text_ik" indexed="true" stored="true"  multiValued="false"/>
    	<!--复制域(solr的搜索优化功能,将多个字段域复制到一个域里面,提高查询的效率)-->
    	<field name="doc_keywords"  type="text_ik" indexed="true" stored="false"  multiValued="true"/>
    	<copyField source="typeName"  dest="doc_keywords"/>
    	<copyField source="docName"  dest="doc_keywords"/>
    	<copyField source="introduction"  dest="doc_keywords"/>
    	<copyField source="keyPackage"  dest="doc_keywords"/>
    	<copyField source="uploadBy"  dest="doc_keywords"/>
    	<copyField source="uploadTime"  dest="doc_keywords"/>
    	<copyField source="downloadNumber"  dest="doc_keywords"/>
    	<copyField source="author"  dest="doc_keywords"/>
    	<copyField source="writeDate"  dest="doc_keywords"/>
    	<copyField source="jh"  dest="doc_keywords"/>
    

    增删改
    添加数据
    在这里插入图片描述
    根据id删除
    在这里插入图片描述

    根据条件删除 左边时域 右边时字段域
    在这里插入图片描述
    solr查询
    在这里插入图片描述

    条件查询
    在这里插入图片描述

    solr复制域的查询
    在这里插入图片描述

    设置高亮
    在这里插入图片描述

    创建springboot项目

    **
    第一步创建字段域对应的实体 SearchResult

    package com.shiwen.yitihui.domain;
    
    import java.io.Serializable;
    import java.util.Date;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.ForeignKey;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;
    
    /**
    * @author wangjie:
    * @version 创建时间:2019年8月20日 下午4:48:41
    * @Description 类描述:solr查询实体
    */
    
    @Entity
    @Table(name="B_DOCUMENT_FILE")
    public class SearchResult extends AbstractEntity {
    	
    	private static final long serialVersionUID = -8052339972799799652L;
    	
    	@ManyToOne
    	@JoinColumn(name="docType")
    	private DocType  docType;
    	
    	@Column(name="doc_name")
    	private String  docName;
    	
    	@Column(name="introduction")
    	private String  introduction;
    	
    	@Column(name="key_package")
    	private String  keyPackage;
    	
    	@Column(name="upload_by")
    	private String  uploadBy;
    	
    	private Date uploadTime = new Date();
    	
    	@Column(name="download_number")
    	private Long downloadNumber;
    	
    	@Column(name="author")
    	private String  author;
    	
    	private Date writeDate;
    	
    	@Column(name="jh")
    	private String  jh;
    
    	public DocType getDocType() {
    		return docType;
    	}
    
    	public void setDocType(DocType docType) {
    		this.docType = docType;
    	}
    
    	public String getDocName() {
    		return docName;
    	}
    
    	public void setDocName(String docName) {
    		this.docName = docName;
    	}
    
    	public String getIntroduction() {
    		return introduction;
    	}
    
    	public void setIntroduction(String introduction) {
    		this.introduction = introduction;
    	}
    
    	public String getKeyPackage() {
    		return keyPackage;
    	}
    
    	public void setKeyPackage(String keyPackage) {
    		this.keyPackage = keyPackage;
    	}
    
    	public String getUploadBy() {
    		return uploadBy;
    	}
    
    	public void setUploadBy(String uploadBy) {
    		this.uploadBy = uploadBy;
    	}
    
    	public Date getUploadTime() {
    		return uploadTime;
    	}
    
    	public void setUploadTime(Date uploadTime) {
    		this.uploadTime = uploadTime;
    	}
    
    	public Long getDownloadNumber() {
    		return downloadNumber;
    	}
    
    	public void setDownloadNumber(Long downloadNumber) {
    		this.downloadNumber = downloadNumber;
    	}
    
    	public String getAuthor() {
    		return author;
    	}
    
    	public void setAuthor(String author) {
    		this.author = author;
    	}
    
    	public Date getWriteDate() {
    		return writeDate;
    	}
    
    	public void setWriteDate(Date writeDate) {
    		this.writeDate = writeDate;
    	}
    
    	public String getJh() {
    		return jh;
    	}
    
    	public void setJh(String jh) {
    		this.jh = jh;
    	}
    }
    
    

    第二部创建solr搜索的接口

    public interface SearchSolrService {
    	
    	public List<SearchResult> getList();
    	
    	public List<SearchResult> getListBySearchKey(String searchKey,Integer page, Integer row);
    
    }
    

    第三步pom文件添加solr依赖

    <!-- solr -->
    		<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-data-solr</artifactId>
    		</dependency>
    

    第三步实现SearchService接口
    发现solr引擎查询,需要有数据才能查,因此需要将数据库中的数据放入到solr引擎中(及solr初始化)

    spring:
      application:
        name: solr
      data:
        solr:
          host: http://127.0.0.1:8080/solr/core1
    

    第四步solr的增删改
    (1) solr的增加在这里插入图片描述
    删除solr
    在这里插入图片描述
    solr初始化

    	/**
    	 * solr初始化
    	 */
    	@RequestMapping("/init")
    	public void initDocument() {
    		// 查询数据库的信息
    		List<SearchResult> searchResults = searchSolrService.getList();
    		for (SearchResult result : searchResults) {
    			// 创建solr文档对象
    			SolrInputDocument docunment = new SolrInputDocument();
    			docunment.addField("id", result.getId());
    			docunment.addField("docType", result.getDocType());
    			docunment.addField("docName", result.getDocName());
    			docunment.addField("introduction", result.getIntroduction());
    			docunment.addField("keyPackage", result.getKeyPackage());
    			docunment.addField("uploadBy", result.getUploadBy());
    			docunment.addField("uploadTime", result.getUploadTime());
    			docunment.addField("downloadNumber", result.getDownloadNumber());
    			docunment.addField("author", result.getAuthor());
    			docunment.addField("writeDate", result.getWriteDate());
    			docunment.addField("jh", result.getJh());
    			// 添加solr文档对象到solr服务引擎中
    			try {
    				solrClient.add(docunment);
    				solrClient.commit();
    			} catch (SolrServerException | IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    
    	}
    

    solr查询

    	/**
    	 * solr查询
    	 */
    	@RequestMapping("/getList")
    	public Map<String, Object> queryAllSolr(@RequestParam String value) throws IOException, SolrServerException {
    		Map<String, Object> mp = new HashMap<String, Object>();
    		try {
    			ModifiableSolrParams params =new ModifiableSolrParams();
    			if(value == null || value.equals(null)) {
    				//params.add("q", "*:*");
    				params.add("q","id:* or docName:* or introduction:* or keyPackage:* or uploadTime:* or author:* or author_s:*");
    			}else {
    				//params.add("q", "*:*"+value);
    				//params.add("q","*:*"+value+"*");
    				params.add("q","id:*"+value+"* or docName:*"+value+"* or introduction:*"+value+"* or keyPackage:*"+value+"* or uploadTime:*"+value+"* or author:*"+value+"* or author_s:*"+value+"*");
    			}
                params.add("start","0");
                params.add("rows","100");
                QueryResponse query = solrClient.query(params);
                mp.put("list", query.getResults());
            }catch (Exception e){
                e.printStackTrace();
            }
    		return mp;
     
    	}
    

    查询对应的前段页面

    <!-- 使用solr进行全文索引 -->
    <div class="panel panel-default">
        <div class="panel-heading">
            <form class="form-horizontal">
                <div style="float:left;">
                    <input ng-model="searchContent" class="form-control ng-pristine ng-untouched ng-valid ng-empty"
                        style="560px;height: 34px" type="text" ng-keyup="enterEvent($event)">
                </div>
                <div style="float:left;50px;"><span class="input-group-addon"
                        style="border-color: #1e293d; background-color: #1e293d;height: 34px" ng-click="solrSearch()">搜索</span>
                </div>
            </form>
        </div>
    </div>
    ``
    对应请求后台的js这个是使用anglarjs写的
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190822105208386.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDA2MjM4NA==,size_16,color_FFFFFF,t_70)
    
    小蘑菇
  • 相关阅读:
    不走弯路,就是捷径
    小白逆袭之路
    java期末设计(十三周)
    java第6次作业
    java第五次作业
    java第四次作业
    第三次作业
    第二次作业
    对异常的看法
    java学习笔记(一)
  • 原文地址:https://www.cnblogs.com/wang66a/p/12069281.html
Copyright © 2020-2023  润新知