zoukankan      html  css  js  c++  java
  • 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)
    
    小蘑菇
  • 相关阅读:
    姐姐的vue(1)
    LeetCode 64. Minimum Path Sum 20170515
    LeetCode 56. 56. Merge Intervals 20170508
    LeetCode 26. Remove Duplicates from Sorted Array
    LeetCode 24. Swap Nodes in Pairs 20170424
    LeetCode 19. Remove Nth Node From End of List 20170417
    LeetCode No.9 Palindrome Number 20170410
    LeetCode No.8. String to Integer (atoi) 2017/4/10(补上一周)
    LeetCode No.7 Reverse Integer 2017/3/27
    LeetCode No.4 Median of Two Sorted Arrays 20170319
  • 原文地址:https://www.cnblogs.com/wang66a/p/12069281.html
Copyright © 2011-2022 走看看