springboot整合solr

@TOC

1、配置solr整合项目

1.1、整合依赖

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

1.2、配置

server:
  port: 8080

spring:
  data:
    solr:
      host: http://localhost:8983/solr/new_core

如何查找solr的核心
在这里插入图片描述
去掉#号

2、配置数据库

2.1、在solr创建数据库/导入(分词器)

2.2、启动MySQL

3、具体代码示例

3.1、solrClient(整合jar包提供的对象)

    @Autowired
    protected SolrClient solrClient;//spring整合jar包提供的一个对象,可以进行注入

运行机制:先去读yml文件提供的URL访问路径host: http://localhost:8983/solr/new_core,然后此路径为基础去实例一个solr的对象,然后此对象可以做一些增删改查

3.2、代码

BaseSolrDao.java

package com.dao;

import com.bean.User;
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.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.IOException;
import java.util.List;

/**
 * 基础solr数据处理父类
 * @param <T>
 */
public class BaseSolrDao<T> {

    @Autowired
    protected SolrClient solrClient;//spring整合jar包提供的一个对象,可以进行注入

    public void insert(SolrInputDocument document) throws IOException, SolrServerException {
        solrClient.add(document);
        //提交
        solrClient.commit();
    }

    /**
     * 添加或修改,修改的时候先删除在修改避免数据重复
     * @param t
     */
    public void update(T t) throws IOException, SolrServerException {
        solrClient.addBean(t);
        //提交
        solrClient.commit();
    }

    /**
     * 删除
     * @param query
     * @return
     */
    public void delete(String query) throws IOException, SolrServerException {

        solrClient.deleteByQuery(query);
        //提交
        solrClient.commit();
    }

    /**
     * 查询
     * @param solrQuery
     * @param clazz
     * @return
     */
    public List<T> select(SolrQuery solrQuery, Class<T> clazz) throws IOException, SolrServerException {

        //查询
        QueryResponse queryResponse = solrClient.query(solrQuery);
        //将查询结果转换指定元素类型的集合
        List<T> list = queryResponse.getBeans(clazz);

        return list;

    }
}

UserVo.java

package com.bean.vo;

import java.io.Serializable;

public class UserVo implements Serializable {

    private Integer gender;
    private Integer maxAge;
    private Integer minAge;
    private String content;

    public UserVo() {
    }

    public UserVo(Integer gender, Integer maxAge, Integer minAge, String content) {
        this.gender = gender;
        this.maxAge = maxAge;
        this.minAge = minAge;
        this.content = content;
    }

    @Override
    public String toString() {
        return "UserVo{" +
                "gender=" + gender +
                ", maxAge=" + maxAge +
                ", minAge=" + minAge +
                ", content='" + content + '\'' +
                '}';
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public Integer getMaxAge() {
        return maxAge;
    }

    public void setMaxAge(Integer maxAge) {
        this.maxAge = maxAge;
    }

    public Integer getMinAge() {
        return minAge;
    }

    public void setMinAge(Integer minAge) {
        this.minAge = minAge;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

UserDao.java

package com.dao;

import com.bean.User;
import org.springframework.stereotype.Repository;

/**
 *  user solr数据处理对象
 */
@Repository
public class UserDao extends BaseSolrDao<User> {
}

UserService.java

package com.service;

import com.bean.User;
import com.bean.vo.UserVo;
import org.apache.solr.client.solrj.SolrServerException;

import java.io.IOException;
import java.util.List;

/**
 *  用户solr业务逻辑接口
 */
public interface UserService {

    void save(User user) throws IOException, SolrServerException;
    void update(User user) throws IOException, SolrServerException;
    void remove(String query) throws IOException, SolrServerException;
    List<User> query(UserVo userVo, int start, int size) throws IOException, SolrServerException;
}

UserServiceImpl.java
== solrQuery.addFilterQuery(“user_content:”+userVo.getContent().trim());==

package com.service.impl;

import com.bean.User;
import com.bean.vo.UserVo;
import com.dao.UserDao;
import com.service.UserService;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.List;

/**
 *  user业务逻辑实现
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public void save(User user) throws IOException, SolrServerException {
        SolrInputDocument document = new SolrInputDocument();

        document.addField("user_id", user.getUserId());
        document.addField("user_userName", user.getUserName());
        document.addField("user_password", user.getPassword());
        document.addField("user_content", user.getContent());

        userDao.insert(document);
    }

    @Override
    public void update(User user) throws IOException, SolrServerException {
        userDao.update(user);
    }

    @Override
    public void remove(String query) throws IOException, SolrServerException {
        userDao.delete(query);
    }

    @Override
    public List<User> query(UserVo userVo, int start, int size) throws IOException, SolrServerException {

        SolrQuery solrQuery = new SolrQuery("*:*");

        //添加普通条件
        //不加,说明输出的是toString方法,加上,说明输出的content的字段的值
        if (userVo.getContent() != null && !userVo.getContent().trim().equals("")){
            solrQuery.addFilterQuery("user_content:"+userVo.getContent().trim());
        }
        if (userVo.getGender() != null){
            solrQuery.addFilterQuery("user_gender:"+userVo.getGender());
        }
        //添加范围条件
        if (userVo.getMaxAge() != null){
            solrQuery.addFilterQuery("user_age:[* TO " + userVo.getMaxAge() + "]");
        }
        if (userVo.getMinAge() != null){
            solrQuery.addFilterQuery("user_age:[" + userVo.getMinAge() + " TO *]");
        }

        //添加排序
//        solrQuery.addSort("user_age", SolrQuery.ORDER.desc);
        solrQuery.addSort("user_age", SolrQuery.ORDER.asc);

        //添加分页
        solrQuery.setStart(start);
        solrQuery.setRows(size);

        return userDao.select(solrQuery, User.class);
    }
}

UserController.java

package com.controller;

import com.bean.User;
import com.bean.dto.Dto;
import com.bean.vo.UserVo;
import com.service.UserService;
import com.util.PageAssistant;
import org.apache.solr.client.solrj.SolrServerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.IOException;
import java.util.List;

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("query")
    @ResponseBody
    public Dto query(UserVo userVo, PageAssistant<User> pa){

        System.out.println(">>>> query");
        System.out.println(userVo);

        List<User> userList = null;
        try {
            userList = userService.query(userVo, pa.getStart(), pa.getPageSize());
        } catch (IOException e) {
            e.printStackTrace();
            return new Dto("false", "查询失败!", "3001");
        } catch (SolrServerException e) {
            e.printStackTrace();
            return new Dto("false", "查询失败!", "3002");
        }

        return new Dto(userList);
    }

    @RequestMapping("add")
    @ResponseBody
    public Dto add(User user){
        System.out.println(">>>> add");
        System.out.println(user);

        try {
            userService.save(user);
        } catch (IOException e) {
            e.printStackTrace();
            return new Dto("false", "添加失败!", "2001");
        } catch (SolrServerException e) {
            e.printStackTrace();
            return new Dto("false", "添加失败!", "2002");
        }

        return new Dto("添加成功!", null);
    }

    @RequestMapping("remove")
    @ResponseBody
    public Dto remove(User user){
        System.out.println(">>>> remove");
        System.out.println(user);

        try {
            userService.remove("user_id:"+user.getUserId());
        } catch (IOException e) {
            e.printStackTrace();
            return new Dto("false", "删除失败!", "4001");
        } catch (SolrServerException e) {
            e.printStackTrace();
            return new Dto("false", "删除失败!", "4002");
        }

        return new Dto("删除成功!", null);
    }

    @RequestMapping("modify")
    @ResponseBody
    public Dto modify(User user){
        System.out.println(">>>> modify");
        System.out.println(user);

        try {
            userService.update(user);
        } catch (IOException e) {
            e.printStackTrace();
            return new Dto("false", "修改失败!", "5001");
        } catch (SolrServerException e) {
            e.printStackTrace();
            return new Dto("false", "修改失败!", "5002");
        }

        return new Dto("修改成功!", null);
    }
}

查询所有
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值