学习的原因:

  17年的时候有学习使用过lucene和solr,但是后来也遗忘了,最近公司有个项目需要使用到全文检索,正好也顺便跟着学习一下,使用的版本是Solr7.4的,下载地址:http://archive.apache.org/dist/lucene/solr/7.4.0/

solr解压之后的目录结构:

各文件夹里面的内容:

solr从5版本之后不再需要tomcat,使用内置的jetty启动。

下面开始正式开始学习使用Solr:

1、启动solr

  因为现在solr使用的内置服务器,我们只需要通过命令启动就可以了。切换到bin目录。

shift+右键,出现黑窗口,输入solr start

出现截图这样的就是启动成功了,中间有日志报错不用管他。访问:http://localhost:8983/solr/#/,就可以看到solrAdmin页面了

2、配置Solr核心(可以理解为solr的数据库)

  配置core有两种方式一种是官方推荐的,一种是在admin页面创建

(1)通过Core Admin创建

 。

这样创建会报错。可以看到错误提示 无法找打solrconfig.xml文件。这里注意下:创建的instanceDir和dataDir 需存在,就是我们需在solr-7.4.0\server\solr 目录下先去创建目录

此目录下的conf文件我们可从server\solr\configsets\sample_techproducts_configs中复制

这样再去新增就可以了

  (2)官方推荐

    使用命令 solr create -c test

3、配置IK分词器

  

将标记的jar复制到\server\solr-webapp\webapp\WEB-INF\lib

然后在server\solr-webapp\webapp\WEB-INF文件夹下面创建一个classes文件夹将上面标记的复制进去

找到刚刚创建的Core(yangk)下面的conf打开managed-schema添加如下代码:

<fieldType name="yangk_ik" class="solr.TextField">
        <analyzer type="index" useSmart="false"
            class="org.wltea.analyzer.lucene.IKAnalyzer" />
        <analyzer type="query" useSmart="true"
            class="org.wltea.analyzer.lucene.IKAnalyzer" /></fieldType> 

在这里我们发现并没有schema.xml。这是因为Solr版本中(Solr5之前),在创建core的时候,Solr会自动创建好schema.xml,但是在之后的版本中,新加入了动态更新schema功能,这个默认的schema.xml确找不到了,在Solr5以后,这个schema文件已经不是默认生成好的了,它被取了一个名字managed-schema

这里想要看到配置的分词器,需要重启下solr  命令:solr restart –p 端口号 重启solr服务

4、Solr整合Mysql

  整合Mysql肯定需要Mysql的包,这里使用的是8.0的,将mysql的包放到solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib下面

  然后到solr-7.4.0\dist文件下下面找到

  将这两个包也放到solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib下面

  为了区分,我从新创建一个croe取名mysql,然后找到solr-7.4.0\example\example-DIH\solr\db文件夹

  将solr-7.4.0\example\example-DIH\solr\db文件里面的内容复制到mysql文件夹里面

  

  进入conf里面找到db-data-config.xml修改配置文件,改为自己的数据库信息

<dataConfig>

    <dataSource driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/springboot?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=UTC" user="root" password="root" />
    <document>
        <entity name="item" query="select id,name from sys_area">
           <field column="id" name="id" />
             <field column="name" name="name" />
         </entity>

    </document>
</dataConfig>
  DataSource:数据库连接信息  Entity:对应数据库的数据表
  Field:数据库字段,对应于solr的schema.xml中的 field 字段。其中 column 表示数据库字段名,name 表示 field 的 name。

  然后在找到solrconfig.xml配置requestHandler

  然后找到managed-schema,配置分词器和索引字段

  注意:field节点对应db-data-import.xml中的field节点 其中他们的name属性保持一致。如果查询想使用Ik的话,可以把type属性设置为mysql_ik类型。但是因为managed-schema已经存在了id和name的field,所以我配置的时候报错了。如果managed-schema已有的就不需要配置了。只要配置没有的字段就行了。

  这个时候配置成功了就可以导入索引

  这个时候索引库就导入成功

5、使用solrj

  maven配置solrj的包

        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            </dependency>

  java代码

public class SolrjDrmo {
    // 这个是solr索引库的连接地址
    private static final String URL = "http://localhost:8983/solr/mysql";

    public static void main(String[] args) throws SolrServerException, IOException {
        // 创建solr客户端连接
        HttpSolrClient hsc = new HttpSolrClient.Builder(URL).build();
        // 创建查询对象
        SolrQuery query = new SolrQuery();
        query.setQuery("*:*");// 设置查询全部数据的条件
        /* query.setQuery("name:江苏省"); */ // 列名:值

        List<Map<String, Object>> list = getSolrQuery(hsc, query);
        if (list == null) {
            System.out.println("没有数据");
            return ;
        }
        for (Map<String, Object> map : list) {
            Iterator<String> it = map.keySet().iterator();
            while (it.hasNext()) {
                String key = it.next();
                Object value = map.get(key);
                System.out.println(key + "," + value);
            }
            System.out.println("                 ");
        }
    }

    public static List<Map<String, Object>> getSolrQuery(HttpSolrClient client, SolrQuery query)
            throws SolrServerException, IOException {
        List<Map<String, Object>> list = null;
        // 执行查询并返回结果
        QueryResponse resp = client.query(query);
        SolrDocumentList results = resp.getResults();
        // 获取查询到的数据总量
        long numFound = results.getNumFound();
        // 判断总量是否大于0,
        ) {
            // 如果小于0,表示未查询到任何数据,返回null
            return null;
        } else {
            // 如果大于0,表示有数据
            // 创建list存储每条数据
            list = new ArrayList<>();
            // 遍历结果集
            for (SolrDocument doc : results) {
                // 得到每条数据的map集合
                Map<String, Object> map = doc.getFieldValueMap();
                // 添加到list
                list.add(map);
            }
            // 返回list集合
            return list;
        }
    }
}

  IK分词器的下载地址:https://files.cnblogs.com/files/yangk1996/ikanalyzer-solr6.5.zip  

  至此一个简单的SolrDemo就搭建成功,如果中间有错误的地方,欢迎指正

Solr7.4的学习与使用的更多相关文章

  1. solr7.1.0学习笔记(10)---Solr发布到Tomcat

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/weixin_39082031/article/details/79069554 将solr作为一个单 ...

  2. JavaEE进阶——全文检索之Solr7.4服务器

    I. Solr Solr简介 Solr是Apache的顶级开源项目,使用java开发 ,基于Lucene的全文检索服务器. Solr比Lucene提供了更多的查询语句,而且它可扩展.可配置,同时它对L ...

  3. solr学习篇(三) solr7.4 连接MySQL数据库

    目录 导入相关jar包 配置连接信息 将数据库导入到solr中 验证是否成功 创建一个Core,创建Core的方法之前已经很详细的讲解过了,如果还是不清楚请参考 solr7.4 安装配置篇: 1.导入 ...

  4. solr学习篇(一) solr7.4 安装配置篇

    目录: solr简介 solr安装 创建core 1.solr简介 solr是企业级应用的全文检索项目,它是基于Apache Lucence搜索引擎开发出来的用于搜索的应用工程 运行环境:solr需要 ...

  5. Solr7.x学习(4)-导入数据

    导入配置可参考官网:http://lucene.apache.org/solr/guide,http://lucene.apache.org/solr/guide/7_7/ 1.数据准备(MySQL8 ...

  6. Solr7.x学习(3)-创建core并使用分词器

    1.创建core文件夹 ck /usr/local/solr-7.7.2/server/solr mkdir first_core cp -r configsets/_default/* first_ ...

  7. Solr7.x学习(2)-设置开机启动

    1.创建solr用户 useradd solr 2.设置solr-7.7.2目录拥有者 cd /usr/local/ chown -R solr:solr solr-7.7.2 3.在/etc/ini ...

  8. Solr7.x学习(1)-安装

    1.下载solr-7.7.2.tgz和jdk-8u221-linux-x64.tar.gz 2.将文件解压到/usr/local目录 cd /usr/local/ tar -zxvf jdk-8u22 ...

  9. Solr7.x学习(8)-使用spring-data-solr

    1.maven配置 <dependency> <groupId>org.springframework.data</groupId> <artifactId& ...

随机推荐

  1. Python之Scrapy遇见个坑

    运行Scrapy爬虫被限制抓取,报错: -- :: [scrapy.middleware] INFO: Enabled item pipelines: [] -- :: [scrapy.core.en ...

  2. Dockerfile RUN, CMD & ENTRYPOINT

    Dockerfile RUN, CMD & ENTRYPOINT 在使用Dockerfile创建image时, 有几条指令比较容易混淆, RUN, CMD, ENTRYPOINT. RUN是在 ...

  3. 从Objective-C到Swift,你必须会的(二)组合options

    用过Options这个东西的人都知道,几个竖线就把这些值都和到一起了.比如: + (NSStringDrawingOptions)combine{ return NSStringDrawingTrun ...

  4. 团体程序设计天梯赛L2-024 部落 2017-04-18 11:31 274人阅读 评论(0) 收藏

    L2-024. 部落 时间限制 120 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不 ...

  5. handsontable-cell type

    在单元格中呈现自定义的元素:不能使用html元素 var data = [ { title: "<a href='http://www.amazon.com/Professional- ...

  6. persona 典型用户

    1.姓名:王涛 2.年龄:22 3.收入:基本无收入 4.代表用户在市场上的比例和重要性:王涛为铁道学生.本软件的用户主要是学生和老师,尤其是广大的铁大学子,所以此典型用户的重要性不言而喻,而且比例相 ...

  7. 在盒子(2CCC)的日子

    在盒子(2CCC)的日子 DELPHIER的足迹印在DFW,印在2CCC.曾经的DFW和2CCC,学术气氛非常浓烈.有人提问,众人纷纷热心解答,仿佛是在解答自己难题.大家只为技术争的面红耳赤.很怀念当 ...

  8. Javascript设计模式理论与实战:单例模式

    在Javascript中,单例模式是一种最基本又经常用到的设计模式,可能在不经意间就用到了单例模式. 本文将从最基础的理论开始,讲述单例模式的基本概念和实现,最后用一个例子来讲述单例模式的应用. 理论 ...

  9. [Git01]Pro Git 第三章 分支 读书笔记

    [git]分支   Git 的分支模型称为“必杀技特性”,而正是因为它,将 Git 从版本控制系统家族里区分出来. Git 有何特别之处呢?Git 的分支可谓是难以置信的轻量级,它的新建操作几乎可以在 ...

  10. [C#学习笔记]Func委托与Action委托

    学习一项新知识的时候,最好的方法就是去实践它. 前言 <CLR via C#>这本神书真的是太有意思了!好的我的前言就是这个. Fun 如果要用有输入参数,有返回值的委托,那么Func委托 ...