芋道 Solr 极简入门
总阅读量:2605次
摘要: 原创出处 http://www.iocoder.cn/Solr/install/ 「芋道源码」欢迎转载,保留摘要,谢谢!
1. 概述
Apache Solr 是一个开源的、高性能、使用 Java 语言实现的搜索服务器,可以实现全文检索的功能。Solr 提供 HTTP 接口,JSON 数据格式传输,方便不同开发语言的开发者接入。
Solr 是在 Apache Lucene 的基础上进行拓展,提供了比 Lucene 更丰富的查询语句,更好的查询性能。并且,Solr 自带了一个功能完善的管理界面。
友情提示:实际上,Solr 和 Lucene 是在一个 Github 仓库下 https://github.com/apache/lucene-solr,已经不分彼此了。
Solr 是以 Document 为对象进行存储,每个 Document 由一系列的 Field 组成,而每个 Field 表示一个属性。和数据库的表记录一样,每个 Document 需要有一个唯一标识,默认情况下使用 id
属性。
友情提示:胖友可以把 Document 和数据库的表记录等价。
Solr 实现全文检索的功能,主要涉及两个流程:
- 索引流程:向 Solr 发起 POST 请求,请求内容是包含一系列 Field 的 Document,实现对索引增删该的维护。
- 搜索流程:向 Solr 发起 GET 请求,请求内容是查询条件,返回匹配条件的 Document。
友情提示:😈 这里流程只是简单描述,实际会有分词等等复杂的细节。
2. 单机部署
本小节,我们来最小化部署一个 Solr 服务,适合演示、学习、测试环境之用。
① 访问 https://lucene.apache.org/solr/downloads.html 地址,进入 Solr 的下载界面。如下图所示:
这里,我们下载 Solr 的二进制发布版本。执行命令如下:
# 执行下载,180M 多,有点大哈~ |
② 执行 bin/solr start
命令,进行 Solr 服务的启动。当看到 Started Solr server on port 8983 (pid=14133). Happy searching!
日志内容,说明启动成功。
默认配置下,Solr 启动在 8983 端口,所以可以使用浏览器访问 http://127.0.0.1:8983/solr/ 地址,看到 Solr 管理界面。如下图所示:
3. 简单使用
本小节,我们来简单使用 Solr,进一步的了解,嘿嘿~
3.1 创建 Core
Solr 的管理以 Core 为基本单元,每个 Core 里面都有其配置文件、索引文件。
下面,我们来点击 Solr 管理界面的「Core Admin」菜单,创建一个 Core 来测试测试。如下图所示:
因为我们未创建该 Core 相关的目录和配置,所以会报 Error 错误。下面,我们先进行创建。
② 创建 new_core
目录,执行如下命令:
# 进入 Solr 服务器的基础目录 |
② 将上图 configsets/_default/conf
目录下的所有配置文件,拷贝到 new_core
目录下,它是 Solr 推荐的默认配置。如下图所示:
③ 重新点击 Solr 控制台的「Add Core」按钮,即可完成 Core 的创建。如下图所示:
友情提示:写完本文才发现,原来可以直接执行
bin/solr create -c {CORE_NAME}
命令,创建一个指定名字的 CORE。例如说,执行
bin/solr create -c new_core
命令,就创建了一个名字为new_core
的 Core。简单直接~
3.2 新增 Document
① 选择刚创建的 Core,然后点击「Documents」菜单,进入新增 Document 的界面。如下图所示:
② 在 Document(s) 输入框中,输入如下 JSON 数据,进行一个 Document 的新增。如下图所示:
{ |
胖友可以自己再造几个 Document 测试数据,因为稍后要演示查询 Document 的功能。
3.3 查询 Document
① 点击「Query」菜单,进入查询 Document 的界面。如下图所示:
② 在「q」输入框中填写 id:1
,查询编号为 1 的 Document。如下图所示:
3.4 管理 Schema
① 点击「Schema」菜单,进入 Schema 的管理界面。如下图所示:
通过 Schema 我们可以定义 Document 中,每一个 Field 的配置。如果类比数据库的话,Schema 就是数据库表结构。
② 选择 Field name
,查看其具体的配置。如下图所示:
我们来看看图中红圈的每列字段代表的含义:
- Indexed:是否索引。被索引的 Field 在搜索的时候,可以使用它来查询或者排序。在 Lucene 中,被索引的 Field 会建立倒排索引。
- Stored:是否存储。一个 Field 被存储时,在 Solr 的查询结果获得到它。如果设置为存储,它会消耗 CPU、IO、磁盘等资源。
- Multivalued:是否可以存储多个值。也就是说,这个 Field 是否为
[]
数组。 - Tokenized:是否进行分词。
- UnInvertible:是否可逆。
4. 应用接入
参考《芋道 Spring Boot Solr 入门》文章,在 Spring Boot 项目中,基于 Solr 实现搜索功能。
5. 中文分词
在 Solr 中,我们一般采用 Ik-analyzer 进行分词。
胖友可以参考《Solr8 集成 Ik-analyzer 分词》文章,将 Ik-analyzer 集成到 Solr 当中。
6. 数据导入
Solr 支持将 MySQL 等数据库中,导入到索引中。
胖友可以参考《Solr 8.2 使用指南》文章,进行数据导入的操作。
666. 彩蛋
暂时木有彩蛋,嘿嘿~