【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路径下输入,,如下

bash 复制代码
solr.cmd start

这里如果JDK报错,请先安装JDK8及以上

打开浏览器输入https://localhost:8983/solr

创建 code 核心并添加 conf 配置文件

这里因为缺失配置文件会报错,需要手动添加一下

创建后找到 server\solr\ 创建核心新建的文件夹,从 solr-7.7.2\example\example-DIH\solr\solr 中找到配置文件复制到新建文件夹

重启服务

成功示例

测试查询使用

成功示例

安装与配置(Linux)

安装Solr

  1. 下载Solr:

    bash 复制代码
    wget https://archive.apache.org/dist/lucene/solr/8.10.1/solr-8.10.1.tgz
  2. 解压并进入目录:

    bash 复制代码
    tar xzf solr-8.10.1.tgz
    cd solr-8.10.1
  3. 启动Solr:

    bash 复制代码
    bin/solr start
  4. 验证安装:

    打开浏览器,访问http://localhost:8983/solr/,你应该能看到Solr的管理界面。

创建Solr核心

  1. 创建核心:

    bash 复制代码
    bin/solr create -c mycore
  2. 配置核心:

    进入solr/mycore/conf目录,修改solrconfig.xmlschema.xml,配置字段类型和请求处理器。

配置schema.xml

schema.xml中定义文档的字段及其属性。例如:

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的文件,内容如下:

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:

bash 复制代码
curl -X POST -H 'Content-Type: application/json' --data-binary @data.json http://localhost:8983/solr/mycore/update?commit=true

基本查询

在Solr中,查询可以通过HTTP请求进行。基本查询的URL格式为:

bash 复制代码
http://localhost:8983/solr/mycore/select?q=关键词

例如,要查询标题中包含"Solr"的文档,可以使用:

bash 复制代码
http://localhost:8983/solr/mycore/select?q=title:Solr

高级查询

Solr支持多种查询方式,包括布尔查询、范围查询等。例如:

  • 布尔查询:
bash 复制代码
http://localhost:8983/solr/mycore/select?q=title:(Solr OR Lucene)
  • 范围查询:
bash 复制代码
http://localhost:8983/solr/mycore/select?q=author:("John Doe" TO "Jane Doe")

分面搜索

分面搜索允许用户在搜索结果中按特定字段进行筛选。例如,获取作者的分面信息:

bash 复制代码
http://localhost:8983/solr/mycore/select?q=*:*&facet=true&facet.field=author

高亮显示

为了在搜索结果中突出显示关键词,可以使用高亮功能:

bash 复制代码
http://localhost:8983/solr/mycore/select?q=Solr&hl=true&hl.fl=content

应用案例(电商产品搜索系统)

设计数据模型

  • id:产品ID
  • name:产品名称
  • description:产品描述
  • price:产品价格
  • category:产品类别

使用命令创建电商产品核心:

bash 复制代码
bin/solr create -c ecommerce

schema.xml中添加产品字段:

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

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"
    }
]

使用以下命令导入数据:

bash 复制代码
curl -X POST -H 'Content-Type: application/json' --data-binary @products.json http://localhost:8983/solr/ecommerce/update?commit=true

用户可以通过以下方式搜索产品:

bash 复制代码
http://localhost:8983/solr/ecommerce/select?q=name:Laptop

为了提高用户体验,可以添加分面搜索功能,允许用户按类别筛选产品:

bash 复制代码
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)。
    • 全文检索:对文本数据提供更强的全文检索能力,包括多种语言的分析支持。

相关推荐
测开小菜鸟8 分钟前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity1 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天1 小时前
java的threadlocal为何内存泄漏
java
caridle1 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^1 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋31 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花2 小时前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端2 小时前
第六章 7.0 LinkList
java·开发语言·网络
Wx-bishekaifayuan2 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer082 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源