JAVA课程笔记系列: 基于SpringBoot的Data Solr搜索引擎开发

这篇博客详细介绍了如何基于SpringBoot搭建Apache Solr搜索引擎,包括环境配置、从MySQL导入数据、配置中文分词器、SpringBoot集成Solr开发环境、SolrClient操作索引库以及使用SpringBoot JPA进行Solr数据查询。通过实例步骤,帮助读者掌握Solr的使用。
摘要由CSDN通过智能技术生成

基于SpringBoot的Data Solr搜索引擎开发

关于Apache Solr的简介

Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。Solr的特性包括:

  • 高级的全文搜索功能
  • 专为高通量的网络流量进行的优化
  • 基于开放接口(XML和HTTP)的标准
  • 综合的HTML管理界面
  • 可伸缩性-能够有效地复制到另外一个Solr搜索服务器
  • 使用XML配置达到灵活性和适配性
  • 可扩展的插件体系
  • 支持像英语,德语,中国,日本,法国和许多主要语言

Apache Solr和Lucene的关系

Solr 与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene ,因为Solr 底层的核心技术是使用Apache Lucene 来实现的,简单的说Solr 是Lucene 的服务器化。需要注意的是Solr 并不是简单的对Lucene 进行封装,它所提供的大部分功能都区别于Lucene。

Apache Solr 相关目录说明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vWhiwMGT-1578972293816)(1.png)]

Solr程序包的结构说明

  • bin :solr相关运行脚本
  • docs:相关API参考文档和wiki资料等
  • licenses:存放了solr相关证书
  • contrib :solr相关扩展的jar包
  • dist :存放Solr 构建完成的JAR 文件、WAR 文件和Solr 依赖的JAR 文件。
  • example :是一个安装好的Jetty 中间件,其中包括一些样本数据和Solr 的配置信息。
  • example/etc :Jetty 的配置文件。
  • example/multicore :当安装Slor multicore 时,用来放置多个Solr 主目录。
  • example/solr :默认安装时一个Solr 的主目录。
  • example/example-DIH:数据库做索引数据源的示例
  • example/webapps :Solr 的WAR 文件部署在这里。
  • src :Solr 相关源码。
  • src/java :Slor 的Java 源码。
  • src/scripts :一些在大型产品发布时一些有用的Unix bash shell 脚本。
  • src/solrj :Solr 的Java 客户端。
  • src/test :Solr 的测试源码和测试文件。
  • src/webapp :Solr web 管理界面。管理界面的Jsp 文件都放在web/admin/ 下面,可以根据你的需要修改这些文件。

Solr 主目录结构说明

  • bin :建议将集群复制脚本放在这个目录下。
  • conf :放置配置文件。
  • conf/schema.xml :建立索引的schema 包含了字段类型定义和其相关的分析器。
  • conf/solrconfig.xml :这个是Solr 主要的配置文件。
  • conf/xslt :包含了很多xslt 文件,这些文件能将Solr 的XML 的查询结果转换为特定的格式,比如:Atom/RSS。
  • data :放置Lucene 产生的索引数据。
  • lib :放置可选的JAR 文件比如对Slor 扩展的插件,这些JAR 文件将会在Solr 启动时加载。
第一章:搭建Apache Solr开发环境

准备步骤 :Tomcat 8以上、JDK7以上、solr5.5.4版本

  1. 将 solr 压缩包解压,并将solr-5.5.4\solr_webapps下的文件夹webapp,将之复制到Tomcat\webapps\目录下,并且改名为solr(名字自己定义)
  2. 将 solr 压缩包中 solr-5.5.4\server\lib\ext所有jar包 全部复制到 Tomcat\ webapps\solr\WEB-INF\lib目录中
  3. 将 solr 压缩包中 solr-5.5.4\ server\resources \log4j.properties 复制到Tomcat\ webapps\solr\WEB-INF 目录中
  4. 创建一个solr_home 的目录(用户可以根据操作系统决定),并将 solr 压缩包中example下的solr 目录除了bin所有文件复制D:\solr_home目录下,如图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h3fAidlT-1578972293821)(2.png)]

  1. 打开Tomcat/webapps/solr/WEB-INF下的web.xml,增加如下配置内容(初始状态下该内容是被注释掉的):
<env-entry>
      <env-entry-name>solr/home</env-entry-name>
      <env-entry-value>D:/solr_home</env-entry-value>
      <env-entry-type>java.lang.String</env-entry-type>
</env-entry><env-entry-value>中的内容改成你的solrhome路径,这里是D:/solr_home

这项配置,主要是建立tomcat 与solr之间的关系的,它的作用是让tomcat找到你所配置的solr 目录。
  1. 启动tomcat,从地址栏输入如下网址:http://localhost:8080/solr会出现如下界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N0JKGKyh-1578972293824)(3.png)]

第二章:Apache Solr 从MySQL数据库中导入数据
  1. 导入solr自带的数据导入包放到tomcat 中的solr工程的web-inf下lib中
    在collection1的目录中添加lib包,把data-import需要用的包拷贝到lib中
    其中包括mysql包

  2. 在磁盘中的solr_home 打开solrconfig.xml 添加如下代码

    <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
        <lst name="defaults">
          <str name="config">data-config.xml</str>
        </lst>
      </requestHandler>
    

  3. 在同级目录下创建一个data-config.xml文件,添加如下内容

    <?xml version="1.0" encoding="UTF-8" ?>
    <dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/mydb" user="root" password="root" />
       <document name="userinfo">
           <entity name="userinfo" query="select id,name,address,birthday,age from userinfo ">
               <field column="ID" name="user_id" />
               <field column="NAME" name="user_name" />
               <field column="ADDRESS" name="user_address" />
               <field column="BIRTHDAY" name="user_birthday" />
               <field column="AGE" name="user_age" />
           </entity>
       </document>
    </dataConfig>
    

    备注说明:

    document:表示搜索引擎的文档

    entity:表示对应的实体类

    query:执行的SQL查询语句

    field:搜索引擎对应的域

    column:数据库对应的列

    name:搜索引擎对应的域名

  4. 在同级目录下schema.xml下配置如下代码,将数据库的字段和域一一对应关系配置好。

<field name="user_id" type="int" indexed="true" stored="true"/>
<field name="user_name" type="string" indexed="true" stored="true"/>
<field name="user_address" type="string" indexed="true" stored="true"/>
<field name="user_birthday" type="date" indexed="true" stored="true"/>
<field name="user_age" type="int" indexed="true" stored="true"/>
第三章:Apache Solr配置中文分词器

1、中文分词器采用的是lucene-analyzers-smartcn来做为Apache Solr的分词器,将该jar包拷贝到tomcat下的webapps-solr

工程中的WEB-INF的lib中。

2、在配置的solr_home目录中打开配置好的collection1下的conf的managed-schema文件添加如下代码

<!-- 添加中文分词器 -->
<dynamicField name="*_txt_cn" type="text_cn" indexed="true" stored="true"/>
<fieldType name="text_cn" class="solr.TextField">
   <analyzer class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"/>
</fieldType>

启动控制台,从地址栏中输入http://localhost:8080/solr会出现如下界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jvRYed8l-1578972293827)(4.png)]

第四章:使用SpringBoot搭建solr开发环境

工程目录结构如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UnXedDLl-1578972293830)(5.png)]

第一步:配置SpringBoot的属性文件

spring.data.solr.host=http://localhost:8081/solr
spring.thymeleaf.cache=false
spring.thymeleaf.encoding=utf-8
spring.thymeleaf.mode=HTML
spring.thymeleaf.suffix=.html

第二步:编写Apache Solr对应的实体类

package com.sudojava.springboot_solr.domain;

import org.apache.solr.client.solrj.beans.Field;

public class Product {
   

    @Field
    private String id;
    @Field
    private String price;
    @Field
    private String title;
    @Field
    private String pic_url;
    @Field
    private String selling_price;
    @Field
    private String sales_volume;
    @Field
    private String coupon_title;

    @Override
    public String toString() {
   
        return "Product{" +
                "id='" + id + '\'' +
                ", price='" + price + '\'' +
                ", title='" + title + '\'' +
                ", pic_url='" + pic_url + '\'' +
                ", selling_price='" + selling_price + '\'' +
                ", sales_volume='" + sales_volume + '\'' +
                ", coupon_title='" + coupon_title + '\'' +
                '}';
    }

    public String getId() {
   
        return id;
    }

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

    public String getPrice() {
   
        return price;
    }

    public void setPrice(String price) {
   
        this.price = price;
    }

    public String getTitle() {
   
        return title;
    }

    public void setTitle(String title) {
   
        this.title = title;
    }

    public String getPic_url() {
   
        return pic_url;
    }

    public void setPic_url(String pic_url) {
   
        this.pic_url = pic_url;
    }

    public String getSelling_price() {
   
        return selling_price;
    }

    public void setSelling_price(String selling_price) {
   
        this.selling_price = selling_price;
    }

    public String getSales_volume() {
   
        return sales_volume;
    }

    public void setSales_volume(String sales_volume) {
   
        this.sales_volume = sales_volume;
    }

    public String getCoupon_title() {
   
        return coupon_title;
    }

    public void setCoupon_title(String coupon_title) {
   
        this.coupon_title = coupon_title;
    }
}

第三步:编写产品查询列表的Service以及实现类

package com.sudojava.springboot_solr.service;

import com.sudojava.springboot_solr.domain.Product;

import java.util.List;

public interface ProductService {
   

    public List<Product> searchProductByName(String title);

}
package com.sudojava.springboot_solr.service;

import com.sudojava.springboot_solr.common.StringTrim;
import com.sudojava.springboot_solr.domain.Product;
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.StringUtils;
import org.springframework
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值