搜索solr应用

本文详细介绍Solr的安装配置过程,包括在Docker环境下安装Solr,设置中文分词器,以及如何从MySQL迁移数据至Solr。此外,还提供了使用Spring Boot整合Solr的代码示例。

solr简介

solr是以lucene为内核开发的企业级搜索应用 应用程序可以通过http请求方式来提交索引,查询索引,提供了比lucene更丰富的查询语言,是一个高性能,高可用环境全文搜索引擎

solr安装

核(core):是用于存储json格式的数据,等价于mysql中数据库的概念
文档:一个json对象就是一个文档 相同属性的json数组集合就是一个表

docker里面安装

下载solr
docker pull solr:5.5.5
安装solr
docker run --name my_solr -id --net host -t solr:5.5.5

默认开起8983端口

检查一下有没有8983端口
netstat -aon | grep 8983
创建core
docker exec -it --user=solr my_solr bin/solr create_core -c mycore

创建的内容为:

Copying configuration to new core instance directory:
/opt/solr/server/solr/mycore

Creating new core 'mycore' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=mycore&instanceDir=mycore

{
  "responseHeader":{
    "status":0,
    "QTime":2591},
  "core":"mycore"}

打印在页面如下↓在这里插入图片描述

solr中文分词器配置
生成ik支持5.5.5的ikjar包
jar拷贝到 /opt/solr/server/solr-webapp/webapp/WEB-INF/lib

修改文件 managed-schema

定义分词器数据类型
     <fieldType name="text_ik" class="solr.TextField" >
     
 <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
  
    <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
  
  </fieldType>

  定义动态字段
  <dynamicField name="*_ik" type="text_ik" indexed="true" stored="true"/>

如下:
在这里插入图片描述

吧mysql里面的数据迁移到solr中

进入solr拷贝支持导入的jar
  cp /opt/solr/dist/solr-dataimporthandler-5.5.5.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
  cp /opt/solr/dist/solr-dataimporthandler-extras-5.5.5.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib

下载一个mysql的jar文件 cp到solr中

docker cp ./mysql-connector-java-5.1.24.jar  my_solr:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib

进入mycore/conf目录 新建连接数据的四要素,在solrconfig.xml同一目录下 添加 data-config.xml(配置连接的数据库以及查询的sql语句

 <?xml version="1.0" encoding="UTF-8"?>  
<dataConfig>  
    <dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.1.3:3306/test" user="root" password="123456" batchSize="-1" />  
<document>  
          <entity name="book" pk="newid"  dataSource="source1"   
                query="select * from  mynew" >
            <field column="newid" name=""/>  
            <field column="newtitle" name="title_ik"/>  
        </entity>
</document>  
</dataConfig> 

修改solrconfig.xml 指定data-c.xml文件

docker cp my_solr:/opt/solr/server/solr/mycore/conf/solrconfig.xml .

代码实现

solr依赖

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

配置文件

设置solr的主机信息 (application.yml)

spring:
  data:
    solr:
      host: http://192.168.119.133:8983/solr
server:
  port: 8888

main方法

 /**
     * 同时提供 SolrTemlate直接操作底层的solrj相关api
     * 在配置类 实例化
     * @param client
     * @return
     */
@SpringBootApplication
public class SolrMain {


    @Bean
    public SolrTemplate solrTemplate(SolrClient client) {
        return new SolrTemplate(client);
    }
    public static void  main(String[] args){
        SpringApplication.run(SolrMain.class,args);
    }

}

controller层

@RestController
public class SolrCon {
    @Autowired
    private SolrTemplate st;
    @GetMapping("/queryEmps")
    public List<emp> queryEmp(String keyword){
        SimpleQuery simpleQuery=new SimpleQuery("ename_ik:"+keyword);
        Page <emp> query = st.query(simpleQuery, emp.class);
        return  query.getContent();
    }

}

添加实体类

@SolrDocument(solrCoreName = "mycore")
public class emp {
    private String id;
    @Field("ename_ik")
    private String ename;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }
}

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
    </script>
<script>
    function query() {
        $.ajax({
            url:'queryEmps',
            dataType:'json',
            data:'keyword='+$("#mykeyword").val(),
            type:'get',
            success:function (r) {
                $("#myemp").text(JSON.stringify(r))
            }
        })
    }

</script>
</head>
<body>
    新闻:<input id="mykeyword" type="text" name="keyword"><button onclick="query()">搜索</button>
        <div id="myemp">

        </div>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值