【Elasticsearch 初级】Elasticsearch 搜索系统的基础知识
简而言之
在本文中,我们将介绍有关学习搜索系统Elasticsearch的基本思想和实施方法,以便于初次接触此系统的人能更好地了解。虽然我自己的工程经验有限,但如果能对正在复习的人有一点帮助,我会感到非常荣幸。
检索系统是什么意思?
搜索系统是一个用于情报检索的系统。
ユーザー → 検索ワード → WEBサービス → 検索 → 検索エンジン
↓
ユーザー ← 検索結果 ← WEBサービス ← 結果 ← 検索エンジン
文中搜索
從文件集合中找到與搜索關鍵字相匹配的文件。
全文搜索可以大致分為兩個部分。
①逐一搜索(逐步查询)
②索引搜索
仅需一种方式:逐步搜索(增量搜索)
逐次搜索是指在进行关键词搜索时,用户每输入一个字就执行一次搜索的方法。在输入完整的搜索词之前就开始搜索,并且随着每个文字的输入,搜索结果会进行更新。
服1 服2 服3 服4 服5
↑ ↑ ↑ ↑ ↑
ユーザー
#ユーザーは青い服が欲しいとするとそれぞれに「青い服」と検索をかけて全てのデータから探さなければならない。
【特点】
– 不需要预先构建索引
– 无法进行快速搜索
用指标搜索
这是指搜索引擎内数据库所持有的”索引”。网页中出现的所有词语都已被登记,搜索结果是根据索引信息输出的。数量庞大,Google持有数千亿个网页作为搜索索引。
ロングTシャツ 半袖Tシャツ ポロシャツ ノースリーブ
↑ ↑ ↑ ↑
ユーザー
【特点】
– 建立索引需要花费时间。
– 可以进行快速搜索。
搜索系统的整体架构
在搜索系统中,系统的组成元素分为与数据注册相关的部分和与搜索相关的部分。
(検索に関わるもの) FE/APP → Search API → Search Engine
↓
(登録に関わるもの) Date Source ← crawler ← Datebase ← indexer
爬虫
定期收集数据的过程。
或者指的是被编程为像跟踪网页链接的机器人。
如果要在服务中实现搜索功能,则需要收集该服务使用的各种数据。
对于网上购物的情况,需要将商品信息和库存等反映在搜索系统中,或者通过网页的爬取来收集数据信息。
收集的数据不应保存在磁盘上,而应保存在数据库等中,以便从多个服务器访问。
索引器
索引器指的是将收集的数据实际上注册到搜索引擎中的过程。
利用索引进行搜索需要事先创建索引。
具体来说,需要对数据进行整理,并将其通过POST方法发送到搜索引擎。
通过始终保持该过程运行,可以实时地更新搜索引擎中的数据。
搜索引擎
以下是一种可能的汉语释义:
Elasticsearch和Slor是搜索引擎。当要构建一个大型搜索系统时,单个服务器无法存储所有数据,无法提供足够的性能,并有可能导致搜索系统停止运行。因此通常需要使用多台服务器进行构建。
使用Elasticsearch或Slor可以利用分散搜索和分散索引功能,从而提高系统的可用性。
搜索API (search API)
有时候在使用搜索系统时,我们会想要编写与服务相应的业务逻辑。
通过使用搜索API,可以使搜索系统更易于操作。
搜索引擎的架构图
尽管搜索引擎,但Elasticsearch和Slor除了拥有搜索引擎外,还具备各种其他功能。
ーー検索エンジンーーーーーーーーーーーーーーーーーー
|【サーバー】 Elasticsearch / Slor |
|【検索コアライブラリ】 Apache Lucene |
ーーーーーーーーーーーーーーーーーーーーーーーーーー
Lucene是用Java编写的,可以快速进行全文搜索。
如果要使用Lucene,则需要使用Java编写程序,并使用Lucene的类。
为了在REST API中使用搜索功能,需要使用Elasticsearch或者Slor。它们都是用Java创建的,并在内部使用Lucene的搜索功能。它们不仅仅是将其服务器化,还具备了在实际生产中所需的分片和复制等功能。此外还可以使用其他各种功能。
Elasticsearch 弹性搜索
文件
文档是指存储在Elasticsearch中的数据单元。
它对应关系型数据库中的“记录”。
文档以JSON格式的对象表示。
文档在内部由ID进行管理,当注册文档时,可以明确指定ID,
如果未指定,系统将自动分配一个ID。
领域
字段是指JSON格式的键值对。它对应于关系数据库中的列。
{
"key1": "value1",
"key2": "value2"
}
上述的JSON中,”key1″: “value1″被称为「字段」。
可以在 Elasticsearch 中使用的数据类型是哪些?
文本类型
文本字符串的类型。词法分析。将文本分割成单词,并为每个单词构建索引。
规格型
与text类型相似,但不进行形态分析。
如果希望不分割文本而创建索引,则使用关键词。
数字类型
可以使用长/短/整数/浮点数等数据类型。可以进行数值的大小比较来进行搜索。
真假模式
可以指定为true或false。
对象类型
可以将JSON对象作为数据进行处理。
数组类型
可以定义具有相同类型的数组类型。
关于索引
文档将被保存在索引中。
Elasticsearch在多个服务器(节点)上启动,每个节点都拥有一个分割的索引。
这个分割单元被称为“分片”。
文档被称为”文档类型”,用于表示文档的组成结构。
例:产品名称、产品价格、库存情况。
在Elasticsearch中,实际上描述文档类型的是所谓的”映射(mapping)”。即使不明确地指定文档类型,Elasticsearch也会自动预测并存储文档的类型。然而,如果无法区分文本类型和关键词类型等情况,则需要明确指定。
关于集群
Elasticsearch 在多个节点上启动。
每个 JVM 上启动一个 Elasticsearch 实例,并将其定义为一个节点。
当在多个节点上启动时,每个节点都会强调其工作。这些节点的集合被称为“集群”。
通过简单的配置,Elasticsearch可以在多个节点上进行部署。通过集群配置,可以处理搜索文档数量的增加和负载问题。此外,通过进行”复制”操作,可以使分片进行复制并分布。
用Docker部署的Elasticsearch
我們將使用Docker來進行開發。
一旦 Docker 的开发结束,我会更新并发布此内容。
我們在這裡載述了Elasticsearch的基礎內容。
文献引用
・首次使用Docker的Elasticsearch
・使用elastisearch-rails在Rails上运行Elasticsearch【适合初学者】