solr学习

一篇教程:https://blog.youkuaiyun.com/awj3584/article/details/16963525
官网下载solr-8.1.1,配置solr,搭建服务器
参考:https://blog.youkuaiyun.com/qq_40202111/article/details/80654876Solr
https://blog.youkuaiyun.com/Cs_hnu_scw/article/details/79388080

Solr

启动服务,访问http://localhost:8080/solr/index.html#/

添加Core

添加文件索引

数据库索引

managed-schema配置分词
在这里插入图片描述

Springboot + Layui

pom.xml

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-solr</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.solr</groupId>
			<artifactId>solr-solrj</artifactId>
			<version>8.1.1</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.1</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.52</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.46</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-test</artifactId>
			<version>2.1.5.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>5.1.7.RELEASE</version>
			<scope>compile</scope>
		</dependency>

项目中添加的还有其他功能,引用的较多

application.yml

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test
    username: root
    password: root
  thymeleaf:
    prefix: classpath:/templates/
server:
  port: 8081
solr:
  httpSolrClient: http://127.0.0.1:8080/solr/

solr.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>solr</title>
    <link rel="stylesheet" href="/layui/css/layui.css" />
    <script src="/layui/layui.js"></script>
</head>
<body>
<div class="layui-container" id="block">
    <div class="layui-row" style="padding-top: 2vw;">
        <div class="layui-inline">
            <input type="text" id="mh" placeholder="请输入..." class="layui-input">
        </div>
        <button class="layui-btn" id="ss">
            <i class="layui-icon layui-icon-search"></i>搜索
        </button>
    </div>
    <table class="table layui-table" id="tbs" lay-filter="demo">
    </table>
</div>
<script src="js/choice.js"></script>
</body>
</html>

choice.js

layui.use(['table','element',"jquery",'layer','form','upload'], function(){
		  var table = layui.table
		  ,$=layui.$
		  ,form=layui.form
		  ,layer = layui.layer
		  ,upload=layui.upload
		  ,element = layui.element; //元素操作

		  //加载数据
			 var s=$("#mh").val();
			  table.render({
			    elem: '#tbs'
			  /*   ,height: 400 */       //不填写将随每页数据大小调整高度
			    ,url: 'MovieSolrTest?str='+s //数据接口
			    ,limits : [8,10,15,20]
			    ,limit : 8
			    ,page: true //开启分页
			    ,id:'tbs'
			   /*  , initSort: {
		         field: 'createDatetime' //排序字段,对应 cols 设定的各字段名
		          , type: 'desc' //排序方式  asc: 升序、desc: 降序、null: 默认排序
		         } */
			    ,cols: [[ 
			      {type:'checkbox',fixed:"left", align:"center"}
			      ,{field: 'm_id', title:'ID', width:80, align:"center"}
			      ,{field: 'username', title:'用户名', width:100,align:"center"}
			      ,{field: 'movie_name', title:'电影名' ,minWidth: 100, align:'center'}
			      ,{field: 'yingping', title:'影评' , minWidth: 100, align:'center'}
			      ,{field: 'dianzan', title:'点赞' , width: 100, align:'center'}
			    ]]
			  });
            $('#ss').on('click', function () {
                // 搜索条件
                var s=$("#mh").val();
                table.reload('tbs', {
                    method: 'post'
                    , where: {
                        'str': s
                    }
                    , page: {
                        curr: 1
                    }
                });
            });
		});

bean 省略get和set

public class moviecore implements Serializable {
    @Id
    @Field
    private int m_id;
    @Field
    private String id;
    @Field
    private String username;
    @Field
    private String movie_name;
    @Field
    private String dianzan;
    @Field
    private String yingping;
    }
}

service

@Service
public class SolrService {
    private Logger logger = LoggerFactory.getLogger(SolrService.class);

    @Value("${solr.httpSolrClient}")
    private String httpSolrClient;			 /*   application.yml中保存的数据 http://127.0.0.1:8080/solr/    */

    private static SolrClient solr;
	
    public HttpSolrClient connetHttpSolrClientServer(String coreName){
        HttpSolrClient server = new HttpSolrClient.Builder(httpSolrClient + coreName).build();
        return server;
    }
 }

controller

public class MovieSolr {
    private static Logger log = Logger.getLogger(MovieSolr.class);     //日志

    @Autowired
    private SolrClient solrClient;

    @Autowired
    private SolrService solrService;

    @RequestMapping("/solr")
    public String helloHtml() {
        return "solr";
    }

    @RequestMapping("MovieSolrTest")
    @ResponseBody
    public  Map<String, Object> SolrTest(String page,String limit,String str) {
        solrClient=solrService.connetHttpSolrClientServer("moviecore");
        Map<String, Object> result = new HashMap<>();
        SolrQuery query = new SolrQuery();
        query.setSort("_version_", SolrQuery.ORDER.asc); //设置排序参数及排序规则
        int startPage = Integer.valueOf(page);
        int pageNum = Integer.valueOf(limit);
        query.setStart((startPage - 1) * pageNum);
        query.setRows(pageNum);
        StringBuffer buffer = new StringBuffer();
        if (("").equals(str)) {
            query.set("q", "*:*"); //没有传入参数则全部查询
        }
        else if ((",").equals(str)) {
            query.set("q", "*:*"); //没有传入参数则全部查询
        }
        else if(str.substring(0,1).equals(",")&&str.length()>1) {
            str = str.substring(1, str.length());
            buffer.append("movie_name:" + str+" OR "+"username:"+str+" OR "+"yingping:"+str); //如果你的字段在solrHome/moviecore/conf/manage-schema文件中定义的类型是text_ik,即已经分词了,那么这里可以这么写,如果你定义的是string类型,即没有分词,那这句话的append中的内容需要写成这样buffer.append("fbfmc:*"+fbfmc+"*"),这是solr的查询规则,没有分词最好是加上模糊查询符号"*"
            query.set("q", buffer.toString());
        }
        //query.set("fl","id,movie_name,username,yingping,dianzan,m_id");
        query.set("df","movie_name");
        //高亮
        //打开开关
        query.setHighlight(true);
        //指定高亮域
        query.addHighlightField("movie_name,username,yingping");
        //设置前缀
        query.setHighlightSimplePre("<span style='color:red'>");
        //设置后缀
        query.setHighlightSimplePost("</span>");
        //执行查询
        QueryResponse rsp = null;
        try {
            rsp = solrClient.query(query);
        } catch (Exception e) {
          log.error(e.getMessage());
        }
        //取查询结果集
        SolrDocumentList results = rsp.getResults();
        //查询总条数
        //log.info(results.getNumFound());
        //该方法将返回结果转换为对象,很方便。
        //List<moviecore> movieList = rsp.getBeans(moviecore.class);
        Map<String, Map<String, List<String>>> highlight = rsp.getHighlighting();
        List<SolrDocument> list = new ArrayList<>();
        for (SolrDocument solrDocument : results) {
            if(highlight!=null){ // 解析高亮查询结果
                Map<String, List<String>> map = highlight.get(solrDocument.get("id").toString()); //根据文本id解析Map
                if(map!=null){
                    for(String key:map.keySet()){ // 遍历map的key值获取设置的
                        if(solrDocument.containsKey(key)){ // 判断文本中是否包含该值
                            List<String> listHigth = map.get(key); // 包含则得到  高亮数据集合
                            if(null!=listHigth && listHigth.size()>0){
                                String str1="";
                                for(String value:listHigth){ // 对集合数据进行拼接
                                    str1+=value;
                                }
                                solrDocument.setField(key, str1); // 替换到原不是高亮显示的部分
                            }
                        }
                    }
                }
            }
            list.add(solrDocument);
        }
        result.put("code", 0);
        result.put("msg", "");
        result.put("count", results.getNumFound());
        result.put("data", list);
        return result;
    }

页面
在这里插入图片描述
结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值