【Apache Solr】深入浅出 Apache Solr 9.7:基本架构与核心概念初识

news/2025/2/1 23:26:13/文章来源:https://www.cnblogs.com/o-O-oO/p/18696261

在当今大数据时代,搜索引擎技术成为了信息检索的核心工具之一。Apache Solr 作为一款基于 Lucene 构建的高性能、可扩展的搜索平台,广泛应用于各类企业级搜索场景。本文将带你初识 Solr 9.7 的基本架构与核心概念,并通过简单示例展示 Solr 中数据是如何以文档形式存在以及索引如何关联这些数据。

一、Solr 与 Lucene 的关系

1.1 Solr 基于 Lucene 构建

Apache Solr 是一个基于 Apache Lucene 的搜索服务器。Lucene 是一个高性能、全功能的文本搜索引擎库,提供了强大的全文检索功能。然而,Lucene 本身只是一个库,需要开发者自行处理索引的创建、更新、查询等操作。Solr 则是在 Lucene 的基础上进行了封装和扩展,提供了一个易于使用的 RESTful API,使得开发者可以更方便地构建和管理搜索引擎。

1.2 Solr 的架构

Solr 的架构可以分为以下几个核心组件:

Core:Solr 的核心单元,每个 Core 包含一个独立的索引和配置文件。一个 Solr 实例可以包含多个 Core,每个 Core 可以独立地进行索引和查询操作。

Index:索引是 Solr 中存储数据的核心结构,基于 Lucene 的倒排索引实现。索引中的数据以文档(Document)的形式存在。

Document:文档是 Solr 中的基本数据单元,类似于数据库中的一行记录。每个文档由多个字段(Field)组成。

Field:字段是文档中的属性,类似于数据库中的列。每个字段都有其数据类型和索引选项。

二、核心概念解析

2.1 索引(Index)

索引是 Solr 中存储数据的核心结构。它基于 Lucene 的倒排索引实现,能够快速定位包含特定关键词的文档。索引的创建和更新是 Solr 的核心操作之一。

2.2 文档(Document)

文档是 Solr 中的基本数据单元。每个文档由多个字段组成,字段可以是文本、数字、日期等类型。文档通过索引与查询操作进行关联。

2.3 字段(Field)

字段是文档中的属性,每个字段都有其数据类型和索引选项。Solr 提供了丰富的字段类型,如文本字段、数值字段、日期字段等,开发者可以根据需求选择合适的字段类型。

三、简单示例:数据以文档形式存在

3.1 创建索引

首先,我们需要创建一个 Solr Core。假设我们已经安装并配置好了 Solr,可以通过以下命令创建一个名为 my_core 的 Core:

bin/solr create -c my_core

3.2 添加文档

接下来,我们可以通过 Solr 的 RESTful API 向 Core 中添加文档。假设我们要添加一个包含 id、title 和 content 字段的文档,可以使用以下 JSON 格式的数据:

{"id": "1","title": "深入浅出 Apache Solr","content": "Apache Solr 是一个基于 Lucene 的搜索服务器。"
}

通过以下命令将文档添加到 my_core 中:

curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_core/update/json/docs' --data-binary @document.json

3.3 查询文档

添加文档后,我们可以通过 Solr 的查询接口检索数据。例如,查询 title 字段包含 Solr 的文档:

curl 'http://localhost:8983/solr/my_core/select?q=title:Solr'

3.4 索引关联数据

Solr 的索引通过倒排索引结构关联文档和字段。当查询时,Solr 会快速定位包含查询关键词的文档,并返回相关结果。例如,上述查询会返回 id 为 1 的文档。

总结

通过本文的介绍,我们初步了解了 Apache Solr 9.7 的基本架构与核心概念。Solr 基于 Lucene 构建,提供了强大的全文检索功能。索引、文档和字段是 Solr 中的核心概念,数据以文档形式存在,并通过索引进行关联。通过简单的示例,我们展示了如何在 Solr 中添加和查询文档。

原创 九极客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/877714.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows环境变量列表变成老式的横行封号分割PATH路径不方便

前言全局说明win11上环境变量的增、删、改有了专用的列表框,每行一个的环境变量,观察也非常方便。 但有的时候设置完变量,再次打开PATH环境变量,就变成以前win7那样的所有环境变量都在一行,用封号分割了,非常不方便。一、说明 1.1 环境: Windows 11 家庭版 23H2 22631.37…

Spring MVC 初始化

继承关系 DispatcherServlet > FrameworkServlet > HttpServletBean > HttpServlet > GenericServlet > Servlet初始化流程DispatcherServlet 是一个 Servlet,所有的 Servlet 初始化都会执行 init 方法(JAVA EE 的知识,别忘了)HttpServletBean 复写了 init(…

kmp匹配

kmp匹配 代码: #include<bits/stdc++.h> using namespace std; const int N=1e5+6; const int M=1e6+6; char s[M];//长串 char p[N];//模式串 int ne[N];//next指针 ,后退的指针 int main(){int n,m;cin>>n>>p+1>>m>>s+1;//计算ne //ne[1]…

Tokenizer

一、思维导图二、subword(子词)粒度 在很多情况下,既不希望将文本切分成单独的词(太大),也不想将其切分成单个字符(太小),而是希望得到介于词和字符之间的子词单元。这就引入了 subword(子词)粒度的分词方法。本文重点介绍这一部分。 2.1 WordPiece 在BERT时代,Wor…

MyBatis之作用域和生命周期

弄清楚SqlSessionFactoryBuild,SqlSessionFactory,SqlSession的作用域和生命周期,可以避免高并发程序中的资源浪费 具体知识点看狂神的两张ppt就行了

CF856C 题解

很厉害的排列计数0 原题链接:luogu & CF 在任务清单里放了半年,今天终于做出来了 qwq,不得不写题解了。 1 能被 \(11\) 整除的数长什么样子?它的奇数位之和与偶数位之和应当模 \(11\) 同余。 我们不妨把一个数的价值定为从前往后奇数位之和减去偶数位之和模 \(11\) 的值…

人生不止于职业发展

0 你的问题,我知道! 工作意义是啥?职业发展在人生啥角色? 1 工作意义 农村人努力学习考上大学,得好工作,为逃离同村同龄人十几岁就工厂打工命运,过不凡人生,实现改命的唯一途径。毕业就进入自带光环的大厂,有份让所有亲戚羡慕的公司和薪水。我认为工作价值是让自己自立…

『Python底层原理』--CPython如何编译代码

前一篇我们介绍了CPython VM的运行机制,它基于一系列字节码指令来实现程序逻辑。 不过,Python字节码在完整描述代码功能上存在局限性,于是代码对象应运而生。像模块、函数这类代码块的执行,本质上就是对应代码对象的运行,代码对象涵盖了字节码、常量、变量名以及各类属性信…

MyBatis之jdbc属性外部配置

将jdbc数据库连接属性写在db.properties中,如图 然然后在配置文件中引入

25.2.1小记

Object类Object类中自带的toString和equals函数(默认比较管理者是否管理相同的对象,可以通过对子类函数的重构实现正常比较) // @Override//重写,编译器会默认构造类型检查public boolean equals(Object obj) {//向下造型CD cc = (CD)obj;return artist.equals(cc.artist…

“尝试一下挣钱的辛苦”之装师

我尝试了把我做的兽头卖出去,记录一下从孩子出生到找到妈咪领养的过程 因为没有太多预算,所以兽设没有找画师,我自己构思的;整个制作过程都要用到热熔胶,很容易烫到>_<(热熔胶——手作娘离不开的东西),梳理毛布也很让人头疼,弄得房间里都是毛毛,虽然但是,孩子…

“尝试一下挣钱的辛苦”

我尝试了把我做的兽头卖出去,记录一下从孩子出生到找到妈咪领养的过程 因为没有太多预算,所以兽设没有找画师,我自己构思的;整个制作过程都要用到热熔胶,很容易烫到>_<(热熔胶——手作娘离不开的东西),梳理毛布也很让人头疼,弄得房间里都是毛毛,虽然但是,孩子…