Py学习  »  Elasticsearch

Elasticsearch(一)-介绍

黑夜的那颗心 • 4 年前 • 272 次点击  
阅读 30

Elasticsearch(一)-介绍

全文检索

想要学习Elasticsearch首先要理解什么是全文检索

相关概念

数据的分类

数据可以分为结构化数据和非结构化数据

结构化数据

  • 具有固定格式或有限长度的数据,如数据库

非结构化数据

  • 无固定格式或不定长度的数据,如办公文档,文章内容
对非结构化数据进行搜索的两种方式

想要查找一个非结构化数据的内容,如含有某个句子的文章,一般有两种方式

顺序扫描法

  • 即按顺序对所有文档进行从头到尾的扫描查找

反向索引法

  • 提前将文档内容的关键字建成索引,然后根据索引进行查找文档

什么是全文检索?

对非结构化数据通过反向索引法进行搜索的过程叫做全文检索

全文检索的应用场景

  • 搜索引擎
  • 站内搜索
  • 系统文件搜索
  • 日志分析

全文检索相关技术

  • Lucene
    • 早期,使用复杂,需要编写大量 Java 代码
  • Solr
    • Apache Lucene 项目的开源企业级搜索引擎,使用简单,提供 RESTful API
  • Elasticsearch
    • 基于 Lucene 开发,使用简单,提供 RESTful API
Solr 和 Elasticsearch 对比
  • 单纯对已有数据进行搜索时Solr更快
  • 实时建立索引时,Solr会产生IO阻塞,影响搜索效率,Elasticsearch不会
  • 随着数据量的增加Solr效率会下降,Elasticsearch无明显变换

全文检索的基本流程

  • 存储
    1. 原始文档
    2. 使用分词组件将文档文词(分词,去除标点符号,去除停用词)
    3. 使用语言处理组件进行处理(大写转小写,复数变单数,过去时、将来时变现在时)
    4. 创建索引词典
    5. 将索引和文档入库(索引存入索引域,文档存入文档域)
    6. 索引和文档建立关联
  • 搜索
    1. 搜索内容
    2. 将内容进行分词和处理
    3. 匹配索引单词
    4. 返回符合索引对应的文档

Elasticsearch

Elasticsearch 是什么

  • Elasticsearch 是一个开源的,基于Lucene的全文搜索引擎
  • 发布于2010年,使用Java编写,隐藏了Lucene的复杂性,提供一套简单的RESTful API
  • 适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据
  • Elasticsearch 不仅仅是 Lucene,并且也不仅仅是一个全文搜索引擎,能力包括:
    • 一个分布式的实时文档存储,每个字段可以被索引与搜索
    • 一个分布式实时分析搜索引擎
    • 能胜任上百个服务节点的扩展,并支持PB级别的数据

Elastic Stack 介绍

Elastic Stack 是适用于数据采集、充实、存储、分析和可视化的一组开源工具。 包括搜索和分析引擎Elasticsearch、数据搜集和日志解析引擎LogStash 以及分析和可视化平台Kibana。 这三个产品被设计成一个集成解决方案,称为 Elastic Stack (ELK Stack)。

LogStash 是什么
  • Logstash 是一个开源的服务器端数据处理管道
  • 可用来对数据进行聚合和处理,并将数据发送到 Elasticsearch
  • 由于日志文件来源多(如:系统日志、服务器 日志等),且内容杂乱,不便于人类进行观察。因此,我们可以使用 Logstash 对日志文件进行收集和统一过滤,变成可读性高的内容,方便开发者或运维人员观察,从而有效的分析系统/项目运行的性能,做好监控和预警的准备工作等。
Kibana 是什么
  • Kibana 是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作。
  • 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。
  • 开发者或运维人员可以轻松地执行高级数据分析,并在各种图表、表格和地图中可视化数据。

Elasticsearch 的用途

  • 数据搜索
  • 日志处理和分析
  • 基础设施指标和容器检测
  • 地理空间数据分析和可视化
  • 业务分析

相关概念

Node 节点
  • 一个Elasticsearch实例即一个节点
Cluster 集群
  • 一个或多个拥有相同cluster.name的Elasticsearch实例组成一个集群
Index 索引
  • 一个索引类似于传统关系型数据库中的一个数据库,是一个存储关系型文档的地方
  • 索引名必须小写,不能以下划线开头,不能包含逗号
Type 类型
  • 类似数据库中的表
Document 文档
  • 即数据,JSON格式。
  • 命名可以是大写或者小写,但是不能以下划线或者句号开头,不应该包含逗号, 并且长度限制为256个字符
Field 字段
  • 文档中的属性,字段,数据库表中的列
  • 字段的名字可以是任何合法的字符串,但 不可以 包含英文句号
索引、类型、文档和属性关系
  • 一个 Elasticsearch 集群可以包含多个索引,相应的每个索引可以包含多个类型
  • 这些不同的类型存储着多个文档,每个文档又有多个属性
Mappings 映像
  • 数据的约束
倒排索引
  • 关系型数据库通过增加一个索引,比如一个 B树(B-tree)索引到指定的列上,以便提升数据检索速度
  • Elasticsearch 和 Lucene 使用了一个叫做倒排索引的结构来达到相同的目的
  • 一个没有倒排索引的属性是不能被搜索到的

下一篇:Elasticsearch(二)-安装

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51653
 
272 次点击