SpringBoot集成Solr

solr小白,所以查了很多相关的博客,最终在项目中实现了全文搜索,思路大概为:下载solr,然后配置到Tomcat,在solr中先实现分词和全局查询,再配置到项目中,代码控制即可。

solr搜索引擎搭建详细过程

参考:solr搜索引擎搭建详细过程

多字段匹配

schema.xml文件中做类似的配置

<!-- tbaclarea -->
	 <field name="pid" type="text_ik" indexed="true" stored="true"/>  
	 <field name="shortname" type="text_ik" indexed="true" stored="true"/>  
	 <field name="longitude" type="text_ik" indexed="true" stored="true"/>  
	 <field name="latitude" type="text_ik" indexed="true" stored="true"/> 
	 <field name="level" type="text_ik" indexed="true" stored="true"/> 
	 <field name="sort" type="text_ik" indexed="true" stored="true"/> 
	 <field name="status" type="text_ik" indexed="true" stored="true"/> 
	 <!-- 综合查询-->
	<field name="fault_all" type="text_ik" indexed="true" stored="true" multiValued="true"/>
	
	<!-- 将fault_name的分词复制到fault_reason、fault_solve中 按照fault_name检索时会检索这两个字段 -->
	<defaultSearchField>fault_all</defaultSearchField>
	<solrQueryParser defaultOperator="AND"/>
	<copyField source="pid" dest="fault_all"/>
	<copyField source="name" dest="fault_all"/>
	<copyField source="shortname" dest="fault_all"/>
	<copyField source="longitude" dest="fault_all"/>
	<copyField source="latitude" dest="fault_all"/>
	<copyField source="level" dest="fault_all"/>
	<copyField source="sort" dest="fault_all"/>
	<copyField source="status" dest="fault_all"/>

配置到springboot项目中

pom.xml中添加如下依赖

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

application.yml中做如下配置

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

实体类文件

package com.fc.test.model.auto;

import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.annotation.Id;
import org.springframework.data.solr.core.mapping.Indexed;
import org.springframework.data.solr.core.mapping.SolrDocument;
import java.io.Serializable;
import java.util.Date;

@SolrDocument(collection="collection1")
public class SolrTbAclUser implements Serializable {

    /** 人员uuid **/
    //@ApiModelProperty(value = "人员uuid")
    @Field("id")
    @Id
    private String useruuid;

    /** 用户名 **/
    //@ApiModelProperty(value = "用户名")
    @Indexed
    private String username;

    /** 登录名 **/
    //@ApiModelProperty(value = "登录名")
    @Indexed
    private String userlogin;
    
    ...

实现类

package com.fc.test.service;

import com.fc.test.model.auto.SolrTbAclUser;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class SolrTbAclUserService{

    @Autowired
    private SolrClient solrClient;
    public void solrsearchtbacluser() throws IOException, SolrServerException {
        // 设置查询
//        SolrTbAclUser solrTbAclUser = new SolrTbAclUser();
//        solrTbAclUser.setUseruuid("admin74578578578578");
//        solrTbAclUser.setCreateTime(new Date());
//        solrTbAclUser.setUserlevel("11");
//        solrClient.addBean(solrTbAclUser);
//        solrClient.commit();
//        String  id ="admin";
//        SolrDocument solrDocument = solrClient.getById(id);

        SolrQuery query = new SolrQuery();
        query.set("q","user_all:物流*");
        //设置每页显示多少条
        query.setRows(10);
        //发起搜索请求
        QueryResponse response = solrClient.query(query);

        SolrDocumentList docs = response.getResults();

        // 查询结果总数
        long cnt = docs.getNumFound();
        System.out.println("总条数为"+cnt+"条");
        for (SolrDocument doc : docs) {
            System.out.println("object:"+ doc);
            System.out.println("fieldValueMap======"+doc.getFieldValueMap());
        }
        System.out.println("byobject=================="+docs);
        solrClient.close();
        //获取filedName
//        Collection<String> fieldNames = solrDocument.getFieldNames();
        //获取file名和内容
//        Map<String, Object> fieldValueMap = solrDocument.getFieldValueMap();
        //            int childDocumentCount = solrDocument.getChildDocumentCount();

//        List<SolrDocument> childDocuments = solrDocument.getChildDocuments();
//        System.out.println("byId=================="+solrDocument);
//        System.out.println("fieldNames=================="+fieldNames);
//        System.out.println("fieldValueMap=================="+fieldValueMap);
//            System.out.println("childDocumentCount=================="+childDocumentCount);
//        System.out.println("childDocuments=================="+childDocuments);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值