前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【全文检索_04】Elasticsearch 基础入门

【全文检索_04】Elasticsearch 基础入门

作者头像
Demo_Null
发布2021-02-01 12:02:46
4600
发布2021-02-01 12:02:46
举报
文章被收录于专栏:Java 学习

1.1 简介

1.1.1 概述

  Elaticsearch 简称为 es,es 是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB(1PB=1024TB) 级别的数据。es 也使用 java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。

1.1.2 发展史

  多年以前,有个叫 Shay Banon 的失业开发者跟随他的新婚妻子来到了伦敦,因为他妻子将在那里学习厨艺。Shay 在寻找工作的同时,开始研究还是早期版本的 Lucene,并打算为她妻子制作一个烹饪菜谱搜索引擎。直接基于 Lucene 工作会比较困难,所以 Shay 开始实现一个 Lucene 之上的抽象层,这样 Java 程序员可以很方便的为他们的应用程序添加搜索功能。于是他发布了自己的第一个开源项目 “Compass”。后来 Shay 找到了一份工作,这份工作主要围绕在高性能与分布式内存数据存储的环境中。高性能、实时、分布式搜索引擎是必不可少的需求。因此他决定重写 Compass 库,使其成为一个独立的服务器,这便是 Elasticsearch。   2010年的2月份,第一个公开版本发布了。从此之后,Elasticsearch 成为 Github 上最受欢迎的项目之一,超过300个代码贡献者。一家关于 Elasticsearch 的公司就此成立,它们不仅提供商业支持还在进行新功能的开发,但是 Elasticsearch 一定会永远向大众开放,永远开源给所有需要的人们。噢,对了,Shay 的妻子还在等待着她的菜谱搜索引擎。

1.1.3 特点

 ① Elasticsearch 不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的 ES。既可以作为一个大型分布式集群(数百台服务器)技术,处理 PB 级数据,服务大公司;也可以运行在单机上,服务小公司。  ③ 对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接 3 分钟部署一下 ES,就可以作为生产环境的系统来使用了,数据量不大,操作不是太复杂。  ④ 数据库的功能面对很多领域是不够用的,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;Elasticsearch 作为传统数据库的一个补充,提供了数据库所不能提供的很多功能。

1.2 安装

1.2.1 安装 Elasticsearch

  安装 Elasticsearch 只有一个要求,那就是需要安装 Java,最低要求 JDK 1.8。我们可以从 官网 获取最新版的 Elasticsearch。安装 Elasticsearch 很简单,只需要下载并解压对应运行平台的压缩文件。安装完毕后,在 Linux 平台使用 ./bin/elasticsearch 即可启动,在 Windows 平台使用 bin\elasticsearch.bat 即可启动。启动后访问 http://localhost:9200 即可看到 Elasticsearch 信息。

1.2.2 安装 elasticsearch-head 可视化

代码语言:javascript
复制
# 克隆 github 项目
git clone git://github.com/mobz/elasticsearch-head.git

# 进入主目录
cd elasticsearch-head

# 安装依赖,注意需要 NodeJs 环境
npm install	

# 启动项目
npm run start

# 访问项目
open http://localhost:9100/

  打开可视化工具之后,输入 Elasticsearch 服务地址,你以为就可以连接到服务了?天真,这里会碰到跨域问题,我们需要在 Elasticsearch 配置文件 elasticsearch.yml 中添加以下配置开启跨域。

代码语言:javascript
复制
http: 
  cors: 
    enabled: true
    allow-origin: "*"

1.2.3 安装 Kibana

  Kibana 是一个针对 Elasticsearch 的开源分析及可视化平台,用来搜索、查看交互存储在 Elasticsearch 索引中的数据。使用 Kibana,可以通过各种图表进行高级数据分析及展示,让海量数据更容易理解。Kibana 操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示 Elasticsearch 查询动态。无需编码或者额外的基础架构,几分钟内就可以完成 Kibana 安装并启动 Elasticsearch 索引监测。   Kibana 的安装也异常简单,仅需两步,先去 官网 下载安装包,然后解压就可以了。需要注意的是,Kibana 的版本最好与 Elasticsearch 保持一致,否则可能会出现奇怪的问题。安装完毕后,在 Linux 平台使用 ./bin/kibana 即可启动,在 Windows 平台使用 bin/kibana.bat 即可启动。启动后访问 http://localhost:5601 即可看到 Kibana 界面。

  最开始启动可能是英文的,我们可以在 Kibana 的配置文件 kibana.yml 中配置 i18n.locale: "zh-CN" 将国际化改为中文后就跟我这里一样了。以后我们的测试都会在 Kibana 中的开发工具中完成,版本不同可能开发工具的位置略有不同,使用都是相似的。之前安装的 elasticsearch-head 仅仅作为查看数据的工具。

1.3 ES 核心概念

1.3.1 名词解释

名词

说明

近实时

有两层意思,一是从写入数据到数据可以被搜索到有一个大概 1 秒的小延迟;二是基于 es 执行搜索和分析可以达到秒级。

Cluster(集群)

集群包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是 elasticsearch)来决定的,ES 启动就是一个只有一节点的集群

Node(节点)

集群中的一个节点,节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操作的时候),默认节点会去加入一个名称为 elasticsearch 的集群,如果直接启动一堆节点,那么它们会自动组成一个 elasticsearch 集群,当然一个节点也可以组成一个 elasticsearch 集群。

Index(索引)

索引包含一堆有相似结构的文档数据,一个 index 包含很多 document,一个 index 就代表了一类类似的或者相同的 document。比如说建立一个 商品索引,里面可能就存放了所有的商品数据,即所有的商品 document。

Type(类型)

6.0 之前每个索引里都可以有多个 type,每一个 type 里面,都会包含一堆 document;6.0 之后每个索引里面只能有一个 type,一般使用 _doc 代替了。7.0 之后就不推荐使用,预计 8.0 之后删除

Document(文档)

文档是 ES 中的最小数据单元,一个 document 可以是一条客户数据,一条商品分类数据等,通常用 JSON 表示,每个 index 下的 type 中,都可以去存储多个 document。

Field(字段)

Field 是 Elasticsearch 的最小单位。一个 document 里面有多个 field,每个 field 就是一个数据字段。

Mapping(映射)

数据如何存放到索引对象上,需要有一个映射配置,包括:数据类型、是否存储、是否分词等。Mapping 用来定义 Document 中每个字段的类型,即所使用的分词器、是否索引等属性,非常关键等。

1.3.2 类比数据库

ES

MySQL

索引 Index

数据库 Database

类型 Type

表 Table

文档 Document

数据行 Row

字段 Field

数据列 Column

映射 Mapping

约束 Schema

1.3.3 ES 设计

☞ 物理设计

  Elasticsearch 在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移。一个集群至少有一个节点,而一个节点就是一个 Elasticsearch 进程,节点可以有多个索引默认的,默认情况下,每个索引由 5 个主要分片组成,而每份主要分片又有一个副本,一共 10 份分片。副本分片对于可靠性和搜索性能很有益处。   Elasticsearch 所能处理的最小单元就是分片。一个分片实际是 Lucene 的索引,即一份包含倒排索引的文件目录。一个 Elasticsearch 索引被分为多个分片。因为 Elasticsearch 是使用 Apache Lucene 作为核心的程序库实现数据索引和搜索功能。所以 Elasticsearch 的一个分片就是一个 Lucene 的索引,也就是说ー个 Elasticsearch 索引实际是由多个 Lucene 索引组成的。

☞ 逻辑设计

  一个索引类型中,包含多个文档。 当我们索引一篇文档时,可以通过这样的一组顺序 索引 ☞ 类型 ☞ 文档 ID ☞ 文档 索引到某个具体的文档。Elasticsearch 通过索引、类型、与文档 ID 唯一确定了某篇文档。注意:这里的 ID 是字符串。ES 逻辑设计中有三大概念:  ♞ 文档:Elasticsearch 是面向文档的,也就是说索引和搜索数据的最小单位是文档。  ♞ 类型:类型是文档的逻辑容器,类似于数据库表是行记录的容器。因此,不同类型的文档,应该放入不同的类型中。  ♞ 索引:索引是类型的容器,每个类型包含了一系列的文档集合。索引还存储了一些设置项,比如 refresh_interval,表示新近加入索引的文档对于搜索可见的时间间隔,即刷新频率。默认每秒更新一次,这也被称为准实时。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 简介
    • 1.1.1 概述
      • 1.1.2 发展史
        • 1.1.3 特点
        • 1.2 安装
          • 1.2.1 安装 Elasticsearch
            • 1.2.2 安装 elasticsearch-head 可视化
              • 1.2.3 安装 Kibana
              • 1.3 ES 核心概念
                • 1.3.1 名词解释
                  • 1.3.2 类比数据库
                    • 1.3.3 ES 设计
                      • ☞ 物理设计
                      • ☞ 逻辑设计
                  相关产品与服务
                  Elasticsearch Service
                  腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档