Springboot integrates solr, solr sets login user password connection

Introduction: This article will introduce the basic usage and comparison of Solr integrating springboot and operating the API in two ways, SolrClient and SolrTemplate. In fact, after you finish studying, you will find that SolrTemplate encapsulates the logic of SolrClient through the proxy factory mode. Interested friends can click down to take a look at the source code. I will not elaborate here.

First you need to install solr and configure the corresponding account and password

You can refer to the article I wrote before:

Sorl environment setup and mysql table import data
solr configuration account permissions login

Directory structure introductionInsert image description here

Catalog introduction:

annotation annotation directory
bean bean object
controller control layer
fiter interceptor
resources configuration file information

code

  1. application.yml configuration file
spring:
  data:
    solr:
      host: http://127.0.0.1:8983/solr
      user: zyy
      pwd: 123456
  1. SolrApplication.java launcher
package com.zyy.test;


import com.zyy.test.filter.SolrAuthInterceptor;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import java.net.URI;

/**
 * @author zhaoyy
 * @version 1.0
 * @description TODO
 * @date 2022/7/18
 **/

@SpringBootApplication
public class SolrApplication {
    
    
    @Value("${spring.data.solr.user}")
    private String username;
    @Value("${spring.data.solr.pwd}")
    private String password;
    @Value("${spring.data.solr.host}")
    private String uri;

    public static void main(String[] args) {
    
    
        SpringApplication.run(SolrApplication.class, args);
    }

    /***
     * @apiNote 配置solr账号密码
     * @author zhaoyy
     * @date 2021-6-8 15:05
     * 拦截器 {@link SolrAuthInterceptor}
     * @return {@link HttpSolrClient }
     */
    @Bean
    public HttpSolrClient solrClient() {
    
    
        CredentialsProvider provider = new BasicCredentialsProvider();
        final URI uri = URI.create(this.uri);
        provider.setCredentials(new AuthScope(uri.getHost(), uri.getPort()),
                new UsernamePasswordCredentials(username, password));
        HttpClientBuilder builder = HttpClientBuilder.create();
        // 指定拦截器,用于设置认证信息
        builder.addInterceptorFirst(new SolrAuthInterceptor());
        builder.setDefaultCredentialsProvider(provider);
        CloseableHttpClient httpClient = builder.build();
        return new HttpSolrClient.Builder(this.uri).withHttpClient(httpClient).build();
    }
}

  1. SolrAuthInterceptor.java lInterceptor
package com.zyy.test.filter;

import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.AuthState;
import org.apache.http.auth.Credentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpCoreContext;

/**
 * @author zhaoyy
 * @version 1.0
 * @description TODO
 * @date 2022/8/22
 **/
public class SolrAuthInterceptor implements HttpRequestInterceptor {
    
    
    @Override
    public void process(final HttpRequest request, final HttpContext context) {
    
    
        AuthState authState = (AuthState) context.getAttribute(HttpClientContext.TARGET_AUTH_STATE);
        if (authState.getAuthScheme() == null) {
    
    
            CredentialsProvider provider =
                    (CredentialsProvider) context.getAttribute(HttpClientContext.CREDS_PROVIDER);
            HttpHost httpHost = (HttpHost) context.getAttribute(HttpCoreContext.HTTP_TARGET_HOST);
            AuthScope scope = new AuthScope(httpHost.getHostName(), httpHost.getPort());
            Credentials credentials = provider.getCredentials(scope);
            authState.update(new BasicScheme(), credentials);
        }
    }
}
  1. control control layer code
    BaseController.java
package com.zyy.test.controller;

import com.zyy.test.annotation.FilterName;
import com.zyy.test.bean.MarketRankDb;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.SimpleQuery;

import java.lang.reflect.Field;
import java.util.*;

/**
 * @author zhaoyy
 * @version 1.0
 * @description 控制类基础封装对象
 * @date 2022/8/22
 **/
public class BaseController {
    
    

    protected SimpleQuery buildParam(MarketRankDb bean) {
    
    
        SimpleQuery query = new SimpleQuery("*:*");
        Map<String, Object> map = BeanMap.create(bean);
        Field[] file = bean.getClass().getDeclaredFields();
        for (Field field : file) {
    
    
            String key = field.getName();
            FilterName filterName = field.getAnnotation(FilterName.class);
            if (Objects.nonNull(filterName)) {
    
    
                continue;
            }
            if (StringUtils.isNotBlank(key) && Objects.nonNull(map.get(key))) {
    
    
                query.addCriteria(new Criteria(key).contains(map.get(key).toString()));
            }
        }

        if (map.containsKey("pageSize") && Optional.ofNullable(map.get("pageSize")).isPresent() &&
                map.containsKey("pageNo") && Optional.ofNullable(map.get("pageNo")).isPresent()) {
    
    
            PageRequest pageRequest = PageRequest.of(bean.getPageNo() - 1, bean.getPageSize());
            query.setPageRequest(pageRequest);
        }
        query.addSort(Sort.by(Sort.Direction.ASC, "id"));
        return query;
    }

}

ControllerTest.java

package com.zyy.test.controller;

import com.zyy.test.bean.Area;
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.apache.solr.common.SolrInputDocument;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.io.IOException;

/**
 * @author zhaoyy
 * @version 1.0
 * @description SolrClient api 操作solr
 * @date 2022/8/15
 **/
@RestController
@RequestMapping("test")
public class ControllerTest {
    
    
    @Resource
    private SolrClient solrClient;

    @PostMapping("add")
    public void add(Area area) {
    
    
        SolrInputDocument document = new SolrInputDocument();
        document.setField("id", area.getId());
        document.setField("name", area.getName());
        try {
    
    
            solrClient.add(document);
            solrClient.commit();
        } catch (SolrServerException e) {
    
    
            e.printStackTrace();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

    @GetMapping("delete")
    public void delete(String query) {
    
    
        try {
    
    
            solrClient.deleteByQuery(query);
            solrClient.commit();
        } catch (SolrServerException e) {
    
    
            e.printStackTrace();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

    @PostMapping("update")
    public Area update(Area book) {
    
    
        try {
    
    
            solrClient.addBean(book);
            solrClient.commit();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } catch (SolrServerException e) {
    
    
            e.printStackTrace();
        }
        return book;
    }

    @GetMapping("get")
    public Area get(String id) {
    
    
        try {
    
    
            SolrDocument solrDocument = solrClient.getById(id);
            solrClient.commit();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } catch (SolrServerException e) {
    
    
            e.printStackTrace();
        }
        return new Area();
    }

    @GetMapping("getAll")
    public void queryDocument() throws IOException, SolrServerException {
    
    
        SolrQuery query = new SolrQuery();
        //查询条件,默认所有查询
        query.setQuery("*:*");
        //查询结果的封装对象
        QueryResponse queryResponse = solrClient.query(query);
        //查询结果
        SolrDocumentList results = queryResponse.getResults();
        //查询到的数量
        long numFound = results.getNumFound();
        System.out.println(numFound);
        for (SolrDocument result : results) {
    
    
            System.out.println("id=>" + result.get("id") + "name=>" + result.get("name"));
        }
    }

    @GetMapping("one")
    public String one() {
    
    
        return "hello world!";
    }
}

SolrTemplateControllerTest.java

package com.zyy.test.controller;

import com.zyy.test.bean.CollectionNameEnum;
import com.zyy.test.bean.SearchCorpCard;
import org.apache.solr.client.solrj.*;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.data.solr.core.query.result.ScoredPage;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;

/**
 * @author zhaoyy
 * @version 1.0
 * @description SolrClient与SolrTemplate 基本api 使用语法,结论推荐使用SolrTemplate
 * @date 2022/8/15
 **/
@RestController
@RequestMapping("solr")
public class SolrTemplateControllerTest {
    
    
    @Resource
    private SolrClient solrClient;

    /**
     * SolrTemplate 其实底部也是通过工厂模式封装了一层 SolrClient 对象
     */
    @Resource
    private SolrTemplate solrTemplate;


    @GetMapping("getName")
    public List<SearchCorpCard> getName(String name) {
    
    
        //设置参数
        SimpleQuery query = new SimpleQuery("*:*").
                addCriteria(new Criteria("corpName").contains(name));
        //起始页
        query.setRows(1);
        //查询起始页 (pageNo-1)* pageSize
        query.setOffset(10L);
        ScoredPage<SearchCorpCard> tbItems = solrTemplate.queryForPage(CollectionNameEnum.TB_SEARCH_CORP_CARD.getCode(), query, SearchCorpCard.class);

        tbItems.forEach(x -> System.out.println(x.toString()));
        return tbItems.getContent();
    }

    @GetMapping("getName1")
    public List<SearchCorpCard> getName1(String name) throws SolrServerException, IOException {
    
    
        SolrQuery query = new SolrQuery();
        //查询条件,默认所有查询
        query.setQuery("*:*");
        QueryResponse queryResponse = solrClient.query(CollectionNameEnum.TB_SEARCH_CORP_CARD.getCode(), query);
        /**
         * 注意使用queryResponse.getBeans 对象转换时需要用注解  @Field 代码底层是通过@Field 标记元素换换,
         * 而上面是通过mappering文件类名称映射的
         *
         */
        List<SearchCorpCard> list = queryResponse.getBeans(SearchCorpCard.class);
        list.forEach(x -> System.out.println(x.toString()));
        solrClient.commit(CollectionNameEnum.TB_SEARCH_CORP_CARD.getCode());
        return list;
    }

    /**
     * 新增 solrTemplate 添加对象
     *
     * @param bean
     * @throws SolrServerException
     * @throws IOException
     */
    @PostMapping("add")
    public void add(@RequestBody SearchCorpCard bean) throws SolrServerException, IOException {
    
    
        UpdateResponse queryResponse = solrTemplate.saveBean(CollectionNameEnum.TB_SEARCH_CORP_CARD.getCode(), bean);
        solrTemplate.commit(CollectionNameEnum.TB_SEARCH_CORP_CARD.getCode());
    }

    /**
     * 新增 solrClient 添加对象
     *
     * @param bean
     * @throws SolrServerException
     * @throws IOException
     */
    @PostMapping("add1")
    public void add1(@RequestBody SearchCorpCard bean) throws SolrServerException, IOException {
    
    
        solrClient.addBean(CollectionNameEnum.TB_SEARCH_CORP_CARD.getCode(), bean);
        solrClient.commit(CollectionNameEnum.TB_SEARCH_CORP_CARD.getCode());
    }

    /**
     * 测试接口
     *
     * @return
     */
    @GetMapping("one")
    public String one() {
    
    
        return "hello world!";
    }
}

SolrTestController.java

package com.zyy.test.controller;

import com.zyy.test.bean.CollectionNameEnum;
import com.zyy.test.bean.MarketRankDb;
import lombok.extern.slf4j.Slf4j;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.assertj.core.util.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.core.query.result.ScoredPage;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author zhaoyy
 * @version 1.0
 * @description SolrTemplate api 操作solr
 * @date 2022/8/22
 **/
@Slf4j
@RestController
@RequestMapping("/test/solr")
public class SolrTestController extends BaseController {
    
    

    @Autowired
    private SolrTemplate solrTemplate;

    /**
     * 根据参数条件查询列表数据
     *
     * @param marketRank
     * @return
     */
    @PostMapping("getList")
    private List<MarketRankDb> getList(@RequestBody MarketRankDb marketRank) {
    
    
        Page<MarketRankDb> page = solrTemplate.query(CollectionNameEnum.TB_MOBILE_MARKET_RANK.getCode(), buildParam(marketRank), MarketRankDb.class);
        return page.getContent();
    }


    /**
     * 分页查询
     *
     * @param marketRank
     * @return
     */
    @PostMapping("getPageList")
    private List<MarketRankDb> getPageList(@RequestBody MarketRankDb marketRank) {
    
    
        ScoredPage<MarketRankDb> data = solrTemplate.queryForPage(CollectionNameEnum.TB_MOBILE_MARKET_RANK.getCode(), buildParam(marketRank), MarketRankDb.class);
        log.info("分页返回数据data={}", data);
        return data.getContent();
    }

    /**
     * 添加一条记录
     *
     * @param marketRank
     */
    @PostMapping("add")
    private void add(@RequestBody MarketRankDb marketRank) {
    
    
        UpdateResponse response = solrTemplate.saveBeans(CollectionNameEnum.TB_MOBILE_MARKET_RANK.getCode(), Lists.newArrayList(marketRank));
        log.info("修改结果result ={}", response);
        solrTemplate.commit(CollectionNameEnum.TB_MOBILE_MARKET_RANK.getCode());
    }

    /**
     * 更新数据
     *
     * @param marketRank
     */
    @PostMapping("update")
    private void update(@RequestBody MarketRankDb marketRank) {
    
    
        solrTemplate.saveBean(CollectionNameEnum.TB_MOBILE_MARKET_RANK.getCode(), buildParam(marketRank));
        solrTemplate.commit(CollectionNameEnum.TB_MOBILE_MARKET_RANK.getCode());
    }


    /**
     * 根据参数条件删除对应数据
     *
     * @param marketRank
     */
    @GetMapping("delete")
    private void delete(@RequestBody MarketRankDb marketRank) {
    
    
        solrTemplate.delete(CollectionNameEnum.TB_MOBILE_MARKET_RANK.getCode(), buildParam(marketRank));
        solrTemplate.commit(CollectionNameEnum.TB_MOBILE_MARKET_RANK.getCode());
    }

    /**
     * 根据ids 多个删除
     *
     * @param ids
     */
    @GetMapping("deletes")
    private void delete(@RequestBody List<String> ids) {
    
    
        solrTemplate.deleteByIds(CollectionNameEnum.TB_MOBILE_MARKET_RANK.getCode(), ids);
        solrTemplate.commit(CollectionNameEnum.TB_MOBILE_MARKET_RANK.getCode());
    }
}

  1. bean
    objectSearchCorpCard.java
package com.zyy.test.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.apache.solr.client.solrj.beans.Field;

import java.io.Serializable;

/**
 * @author zhaoyy
 * @version 1.0
 * @description TODO
 * @date 2022/8/16
 **/
@Data
@AllArgsConstructor
@ToString
@NoArgsConstructor
public class SearchCorpCard implements Serializable {
    
    

    @Field
    private String corpId;
    @Field
    private String corpName;
    @Field
    private String registNo;
    @Field
    private String creditCode;
    @Field
    private String registfund;
    @Field
    private String registAddess;
}

MarketRankDb.java

package com.zyy.test.bean;

import com.zyy.test.annotation.FilterName;
import lombok.Data;
import org.apache.solr.client.solrj.beans.Field;

import java.io.Serializable;

/**
 * 功能:app市场榜单排名DB实体类
 *
 * @author zhaoyy
 * @date 2022-01-13 11:14
 */
@Data
public class MarketRankDb implements Serializable {
    
    
    @FilterName
    private static final long serialVersionUID = -4000524883785970259L;

    @Field
    private Long id;
    @Field
    private String market;
    @Field
    private String listType;
    @Field
    private String subType;
    @Field
    private String trackId;
    @Field
    private String trackName;
    @Field
    private String description;
    @Field
    private String downloads;
    @Field
    private String downloadUrl;
    @Field
    private String appUpdateTime;
    @Field
    private String versionCode;
    @Field
    private String versionDate;
    @Field
    private String versionName;
    @Field
    private String fileSize;
    @Field
    private String packageName;
    @Field
    private String sellerName;
    @Field
    private Integer status;
    @Field
    private String artworkUrl;
    @Field
    private String yesterdayDownload;
    @Field
    private String yesterdayComment;
    @Field
    private String rankChange;
    @Field
    private Integer rank;
    @Field
    @FilterName
    private Integer pageSize;
    @Field
    @FilterName
    private Integer pageNo;

}

CollectionNameEnum.java

package com.zyy.test.bean;

/**
 * solr 集合名称
 *
 * @author zhaoyy
 */
public enum CollectionNameEnum {
    
    
    Test("zyy_test", "测试集合"),
    TB_SEARCH_CORP_CARD("tb_search_corp_card", "企业搜索集合"),
    TB_MOBILE_MARKET_RANK("tb_mobile_market_rank", "手机应用市场app范围排行榜"),
    ;

    private String code;
    private String desc;

    CollectionNameEnum(String code, String desc) {
    
    
        this.code = code;
        this.desc = desc;
    }

    public String getCode() {
    
    
        return code;
    }

    public void setCode(String code) {
    
    
        this.code = code;
    }

    public String getDesc() {
    
    
        return desc;
    }

    public void setDesc(String desc) {
    
    
        this.desc = desc;
    }
}

Area.java

package com.zyy.test.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.annotation.Id;
import org.springframework.data.solr.core.mapping.SolrDocument;

/**
 * @author zhaoyy
 * @version 1.0
 * @description TODO
 * @date 2022/8/15
 **/
@Data
@AllArgsConstructor
@ToString
@NoArgsConstructor
@SolrDocument(collection = "zyy_test")
public class Area {
    
    
    @Field
    private Integer code;
    @Field
    private Integer cityCode;
    @Field
    private Integer provinceCode;

    @Field
    private String name;

    @Id
    @Field
    private Integer id;


}

  1. annotation filter
package com.zyy.test.annotation;


import java.lang.annotation.*;

/**
 * 过滤字段参与where查询
 *
 * @author zhaoyy
 */
@Documented
@Target({
    
    ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface FilterName {
    
    
}

  1. pom.xml maven configuration file
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.zyy.solr</groupId>
    <version>1.0-SNAPSHOT</version>
    <artifactId>solr-springboot</artifactId>

    <description>
        1、solr整合使用:分词搜索等使用
    </description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring-boot.version>2.3.1.RELEASE</spring-boot.version>
        <drools.version>7.47.0.Final</drools.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <exclusions>
                <!-- 单元测试不使用Junit4,使用Junit5 -->
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-spring</artifactId>
            <version>${drools.version}</version>
            <exclusions>
                <!-- 依赖的spring版本全部以spring boot依赖的为准 -->
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-tx</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
        <!-- Maven仓库地址 -->
        <dependency>
            <groupId>com.github.magese</groupId>
            <artifactId>ik-analyzer</artifactId>
            <version>8.5.0</version>
        </dependency>
        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-solr</artifactId>
        </dependency>-->
       <!-- <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-solr</artifactId>
            <version>4.0.18.RELEASE</version>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-solr</artifactId>
            <version>2.4.11</version>
        </dependency>
    </dependencies>
</project>

Create corresponding solr instance

Create command: solr create -c "zyy-test" name needs to correspond to the CollectionNameEnum code value

Table Structure:

CREATE TABLE `tb_mobile_market_rank_test` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `market` varchar(30) DEFAULT NULL COMMENT '市场平台',
  `list_type` varchar(30) DEFAULT NULL COMMENT '榜单分类',
  `sub_type` varchar(30) DEFAULT '' COMMENT '子分类',
  `trackid` varchar(50) DEFAULT NULL COMMENT 'app标识ID',
  `track_name` varchar(255) DEFAULT NULL COMMENT 'app名称',
  `description` text COMMENT '描述',
  `downloads` varchar(50) DEFAULT NULL COMMENT '下载量',
  `download_url` varchar(1024) DEFAULT NULL COMMENT '下载链接',
  `app_update_time` varchar(30) DEFAULT NULL COMMENT '更新时间',
  `version_code` varchar(50) DEFAULT NULL COMMENT '版本编码',
  `version_date` varchar(30) DEFAULT NULL COMMENT '最近版本更新时间',
  `version_name` varchar(50) DEFAULT NULL COMMENT '版本',
  `file_size` varchar(50) DEFAULT NULL COMMENT '文件大小',
  `package_name` varchar(255) DEFAULT NULL COMMENT '捆绑包ID(包名)',
  `seller_name` varchar(500) DEFAULT NULL COMMENT '开发者',
  `status` int(2) DEFAULT NULL COMMENT '状态',
  `artwork_url` varchar(500) DEFAULT NULL COMMENT 'app-icon图标链接',
  `yesterday_download` varchar(50) DEFAULT NULL COMMENT '昨日下载量',
  `yesterday_comment` varchar(50) DEFAULT NULL COMMENT '昨日评论量',
  `rank_change` varchar(255) DEFAULT NULL COMMENT '排名变动情况',
  `rank` int(5) DEFAULT NULL COMMENT '排名',
  `CREATE_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `CREATE_USER` varchar(30) DEFAULT NULL COMMENT '创建人',
  `MODIFY_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `MODIFY_USER` varchar(30) DEFAULT NULL COMMENT '修改人',
  PRIMARY KEY (`ID`) USING BTREE,
  KEY `idx_tb_market_rank_market` (`market`) USING BTREE,
  KEY `idx_tb_market_rank_list_type` (`list_type`) USING BTREE,
  KEY `idx_tb_market_rank_sub_type` (`sub_type`) USING BTREE,
  KEY `idx_market_rank_create_time` (`CREATE_TIME`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3065090 DEFAULT CHARSET=utf8mb4 COMMENT='app市场榜单排名表';

CREATE TABLE `tb_xzqh_areas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(6) DEFAULT NULL,
  `name` varchar(100) DEFAULT NULL,
  `cityCode` varchar(6) DEFAULT NULL,
  `provinceCode` varchar(6) DEFAULT NULL,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `udx_areas_code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=10886 DEFAULT CHARSET=utf8 COMMENT='县级(区县)';

CREATE TABLE `tb_search_corp_card` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(6) DEFAULT NULL,
  `name` varchar(100) DEFAULT NULL,
  `cityCode` varchar(6) DEFAULT NULL,
  `provinceCode` varchar(6) DEFAULT NULL,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `udx_areas_code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=10886 DEFAULT CHARSET=utf8 COMMENT='县级(区县)';

CREATE TABLE `tb_search_corp_card` (
  `ID` bigint(20) NOT NULL,
  `CORPID` bigint(20) DEFAULT NULL,
  `CORPNAME` varchar(200) NOT NULL,
  `REGISTNO` varchar(50) DEFAULT NULL,
  `CREDITCODE` varchar(18) DEFAULT NULL,
  `REGISTFUND` float(18,6) DEFAULT NULL,
  `REGISTADDRESS` varchar(600) DEFAULT NULL
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Article notes

1 exception

ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.solr.UncategorizedSolrException: IOException occurred when talking to server at: http://127.0.0.1:8983/solr; nested exception is org.apache.solr.client.solrj.SolrServerException: IOException occurred when talking to server at: http://127.0.0.1:8983/solr] with root cause
org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity.

So much has been done above, let me explain it below:

1. During the integration process, it was found that if there is no need to add, delete, or modify Solr, when Solr sets up an account, you can directly use http://zyy:[email protected]:8983/solr to connect to Solr, and you can remove the application bean
. Injection and interceptor SolrAuthInterceptor

2. If you set an account and password to add, delete, and modify Solr, you should add the method class mentioned above 1, otherwise exception 1 will be thrown.

Guess you like

Origin blog.csdn.net/weixin_43829047/article/details/126478885