文章目录
- Solr简单介绍
- Solr 版本与 JDK版本 兼容情况
- 安装与配置(Windows)
- 安装与配置(Linux)
- 应用案例(电商产品搜索系统)
- 为什么要用Solr,不用数据库的模糊查询
- Solr对比Elasticsearch
更多相关内容可查看
Solr官方文档:https://solr.apache.org/guide/solr/latest/index.html
Solr简单介绍
Apache Solr
是一个跟Elasticsearch
概念相同的一个并都基于Apache Lucene
的开源搜索平台,旨在为企业和应用提供强大的搜索能力。它支持多种数据类型的搜索,并提供丰富的功能,如全文检索、快速搜索、分面搜索、高亮显示、地理搜索等。
Solr 版本与 JDK版本 兼容情况
- Solr 6.x 和 7.x:
兼容 JDK 8:从 Solr 6.0 开始,Solr 对 JDK 8 的支持变得更加稳定。Solr 6.x 及 7.x 版本通常是与 JDK 8 完全兼容的。 推荐的 JDK 版本:JDK 8 是这些版本推荐的运行环境。尽管它们也支持 JDK 7,但
JDK 8 的支持更为广泛和稳定。- Solr 8.x:
兼容 JDK 8 到 JDK 11:Solr 8.x 版本开始支持 JDK 8、JDK 9、JDK 10 和 JDK 11。具体来说: Solr 8.0 到 8.4 版本推荐使用 JDK 8 或 JDK 11。 但是,Solr 8.5 及以上版本对
JDK 8 的支持逐渐减少,主要推荐使用 JDK 11。 注意:虽然 Solr 8.x 支持 JDK 8,但在 8.5 版本后,JDK
8 的支持逐步被削弱。对于长时间支持(LTS)的版本,建议使用 JDK 11。- Solr 9.x:
不再兼容 JDK 8:Solr 9.x 版本已经不再支持 JDK 8,只支持 JDK 11 或更高版本。Solr 9.0 和后续版本要求 JDK 11 或更高版本来运行。
安装与配置(Windows)
JDK8下载地址:https://archive.apache.org/dist/lucene/solr/4.10.3/
JDK11下载地址:https://solr.apache.org/downloads.html
下载完解压后的文件夹内容
cmd进入bin路径下输入,,如下
solr.cmd start
这里如果JDK报错,请先安装JDK8及以上
打开浏览器输入https://localhost:8983/solr
创建 code 核心并添加 conf 配置文件
这里因为缺失配置文件会报错,需要手动添加一下
创建后找到 server\solr\ 创建核心新建的文件夹,从 solr-7.7.2\example\example-DIH\solr\solr 中找到配置文件复制到新建文件夹
重启服务
成功示例
测试查询使用
成功示例
安装与配置(Linux)
安装Solr
-
下载Solr:
wget https://archive.apache.org/dist/lucene/solr/8.10.1/solr-8.10.1.tgz
-
解压并进入目录:
tar xzf solr-8.10.1.tgz cd solr-8.10.1
-
启动Solr:
bin/solr start
-
验证安装:
打开浏览器,访问http://localhost:8983/solr/
,你应该能看到Solr的管理界面。
创建Solr核心
-
创建核心:
bin/solr create -c mycore
-
配置核心:
进入solr/mycore/conf
目录,修改solrconfig.xml
和schema.xml
,配置字段类型和请求处理器。
配置schema.xml
在schema.xml
中定义文档的字段及其属性。例如:
<field name="id" type="string" indexed="true" stored="true" required="true"/>
<field name="title" type="text_general" indexed="true" stored="true"/>
<field name="content" type="text_general" indexed="true" stored="true"/>
<field name="author" type="string" indexed="true" stored="true"/>
数据导入与索引
创建一个名为data.json
的文件,内容如下:
[
{
"id": "1",
"title": "Solr Basics",
"content": "Apache Solr is a powerful search platform.",
"author": "John Doe"
},
{
"id": "2",
"title": "Understanding Lucene",
"content": "Lucene is the underlying library used by Solr.",
"author": "Jane Doe"
}
]
使用以下命令将数据导入Solr:
curl -X POST -H 'Content-Type: application/json' --data-binary @data.json http://localhost:8983/solr/mycore/update?commit=true
基本查询
在Solr中,查询可以通过HTTP请求进行。基本查询的URL格式为:
http://localhost:8983/solr/mycore/select?q=关键词
例如,要查询标题中包含“Solr”的文档,可以使用:
http://localhost:8983/solr/mycore/select?q=title:Solr
高级查询
Solr支持多种查询方式,包括布尔查询、范围查询等。例如:
- 布尔查询:
http://localhost:8983/solr/mycore/select?q=title:(Solr OR Lucene)
- 范围查询:
http://localhost:8983/solr/mycore/select?q=author:("John Doe" TO "Jane Doe")
分面搜索
分面搜索允许用户在搜索结果中按特定字段进行筛选。例如,获取作者的分面信息:
http://localhost:8983/solr/mycore/select?q=*:*&facet=true&facet.field=author
高亮显示
为了在搜索结果中突出显示关键词,可以使用高亮功能:
http://localhost:8983/solr/mycore/select?q=Solr&hl=true&hl.fl=content
应用案例(电商产品搜索系统)
设计数据模型
id
:产品IDname
:产品名称description
:产品描述price
:产品价格category
:产品类别
使用命令创建电商产品核心:
bin/solr create -c ecommerce
在schema.xml
中添加产品字段:
<field name="id" type="string" indexed="true" stored="true" required="true"/>
<field name="name" type="text_general" indexed="true" stored="true"/>
<field name="description" type="text_general" indexed="true" stored="true"/>
<field name="price" type="float" indexed="true" stored="true"/>
<field name="category" type="string" indexed="true" stored="true"/>
创建一个JSON文件products.json
:
[
{
"id": "1",
"name": "Laptop",
"description": "A high-performance laptop.",
"price": 999.99,
"category": "Electronics"
},
{
"id": "2",
"name": "Smartphone",
"description": "A smartphone with excellent features.",
"price": 499.99,
"category": "Electronics"
}
]
使用以下命令导入数据:
curl -X POST -H 'Content-Type: application/json' --data-binary @products.json http://localhost:8983/solr/ecommerce/update?commit=true
用户可以通过以下方式搜索产品:
http://localhost:8983/solr/ecommerce/select?q=name:Laptop
为了提高用户体验,可以添加分面搜索功能,允许用户按类别筛选产品:
http://localhost:8983/solr/ecommerce/select?q=*:*&facet=true&facet.field=category
为什么要用Solr,不用数据库的模糊查询
1 .其实正如上面solr的介绍中所说的那样,solr本身也可以看成数据库,(no sql类型),但它比数据库搜索速度更快,所以在项目中我们一般把搜搜的部分交给solr,就像我们在京东首页所看到的商品信息,并不是来自数据库,而是来源于solr的索引库
2.数据库本身不能实现分词效果,而只能使用模糊查询,但是模糊查询非常低效,查询速度比较慢,由于在实际生活中,一般搜索是用的比较多的,这样数据库压力自然就很大,所以我们就让供专业的solr来做搜索功能
Solr对比Elasticsearch
可能大家对于搜索引擎更熟悉于Elasticsearch,以下可以在不同的场景下来考虑选择哪一种
1. 架构和设计
-
Solr
- 基于Apache Lucene:Solr是一个独立的搜索平台,使用Java编写,依赖于Lucene库进行全文检索。
- 配置和管理:Solr的配置通常通过XML文件进行,支持复杂的查询、分面搜索和聚合。
- 传统应用:Solr更适合需要复杂搜索功能的企业应用,特别是在基于数据的报表和分析方面。
-
Elasticsearch
- 分布式搜索引擎:Elasticsearch也是基于Lucene,但它是分布式的,支持多节点集群。
- RESTful API:提供了简单易用的RESTful API,便于与其他服务集成,使用JSON格式进行数据交互。
- 实时搜索:Elasticsearch支持实时数据索引和查询,更适合需要快速响应的应用,如日志分析和监控。
2. 功能和特性
-
Solr
- 丰富的查询能力:支持复杂的查询,包括高亮、分面、地理位置搜索等。
- 分面搜索:提供强大的分面功能,适合电商网站和内容管理系统。
- 数据导入:支持通过数据导入工具(DIH)从多种数据源(如数据库)进行索引。
-
Elasticsearch
- 聚合查询:支持多种类型的聚合,可以实现复杂的统计分析。
- 数据类型支持:更好的支持文档数据结构,适合半结构化数据(如JSON)。
- 全文检索:对文本数据提供更强的全文检索能力,包括多种语言的分析支持。