Elasticsearch学习

本文介绍了Elasticsearch,一个基于Lucene的开源搜索引擎,强调其易用性和在云计算中的实时搜索能力,涉及全文检索、非结构化数据处理、倒排索引、索引管理以及集群部署的详细步骤。
摘要由CSDN通过智能技术生成

一,介绍

Elasticsearch 是什么

  • Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 但是,Lucene只是一个库。想要发挥其强大的作用,你需使用Java并要将其集成到你的应用中。 Elasticsearch是使用Java编写并使用Lucene来建立索引并实现搜索功能,但是它的目的是通过简单连贯的RESTful API让全文搜索变得简单并隐藏Lucene的复杂性。 不过,Elasticsearch不仅仅是Lucene和全文搜索引擎,它还提供:

    • 分布式的实时文件存储,每个字段都被索引并可被搜索

    • 实时分析的分布式搜索引擎

    • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据

  • 为什么用Elasticsearch?

    • 用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    • 涉及到like的大数据量模糊查询,如果是直接对数据库进行查询的话,由于like模糊查询无法对数据列应用索引,所以需要一条条字符串进行比对查询,效率非常低下。所以在Java中,解决大数据量的模糊查询,就会用到建立索引库,全文检索的查询技术。

全文搜索引擎

  • 生活中的数据分类

    • 结构化数据

      • 也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。指具有固定格式或有限长度的数据,如数据库,元数据等。

        元数据(字典)是属于数据库本身的一些数据,包含数据库名、数据库字符集、表名、表的大小、表的记录行数、表的字符集、表的字段、表的索引、表的描述、字段的类型、字段的精度、字段的描述等。关于元数据描述:数据库实例的元数据介绍_数据管理 DMS-阿里云帮助中心

    • 非结构化数据

      • 又可称为全文数据,不定长或无固定格式,不适于由数据库二维表来表现,包括所有格式的办公文档、XML、HTML、Word 文档,邮件,各类报表、图片和咅频、视频信息等。

    • 半结构化数据

      • 如果要更细致的区分的话,XML、HTML 可划分为半结构化数据。因为它们也具有自己特定的标签格式,所以既可以根据需要按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。

  • 根据两种数据分类,搜索也相应的分为两种:

    • 结构化数据搜索(对于结构化数据,因为它们具有特定的结构,所以我们一般都是可以通过关系型数据库(MySQL,Oracle 等)的二维表(Table)的方式存储和搜索,也可以建立索引。)

    • 非结构化数据搜索

      • 对于非结构化数据,也即对全文数据的搜索主要有两种方法

        • 顺序扫描即按照顺序扫描的方式查询特定的关键字。

        • 全文检索即将其结构化(设置索引)

  • 全文检索技术以各类数据如文本、声音、图像等为对象,提供按数据的内容而不是外在特征来进行的信息检索,其特点是能对海量的数据进行有效管理和快速检索。它是搜索引擎的核心技术,同时也是电子商务网站的支撑技术。全文检索技术可应用于企业信息网站、媒体网站、政府站点、商业网站、数字图书馆数字图书馆和搜索引擎中。

  • 全文搜索引擎主要由四大系统构成:

    • 下载系统,用于从Web上采集各种类型的网页信息,并保持对Web变化的同步。

    • 分析系统,用于对下载系统采集的信息进行PageRank和分词计算。

    • 索引系统,用于将分析系统处理后的网页对象索引入库。

    • 查询系统,用于分析用户提交的查询请求,然后从索引库中检索出相关网页并将网页排序后,以查询结果的形式返回给用户。

适用场景

检索类服务

  • 搜索文库

  • 电商商品检索

  • 海量系统日志检索

问答类服务(本质上也是检索类)

  • 在线智能客服

  • 机器人

地图类服务

  • 打车app

  • 外卖app

  • 社区团购配送

  • 陌生人社交

倒排索引

1. 词典(Terms Dictionary):词典存储了所有不重复的词项(Terms),每个词项都有一个唯一的标识符(Term ID)。

2. 倒排列表(Inverted List):每个词项都对应一个倒排列表,倒排列表记录了包含该词项的文档的信息。每个倒排列表由多个倒排项(Inverted Item)组成,每个倒排项表示一个文档,包含文档的标识符、出现次数、位置等信息。

3. 位置信息(Position Information):对于需要进行短语查询的字段,倒排列表还会记录每个词项在文档中的具体位置。

4. 倒排索引缓存(Inverted Index Cache):为了提高查询性能,Elasticsearch会将部分倒排索引缓存在内存中,减少磁盘IO的开销。

数据格式类比

 二,入门使用

1.索引

创建索引 :PUT 请求:http://127.0.0.1:9200/索引名称 (重复会报错)

查询所有 :GET 请求:http://127.0.0.1:9200/_cat/indices(查看所有索引)

_cat 表示查看的意思,indices 表示索引

查询单个 :GET 请求:http://127.0.0.1:9200/索引名称

删除索引 :DELETE 请求:http://127.0.0.1:9200/索引名称

2.文档

创建文档 :POST 请求 :http://127.0.0.1:9200/索引名称/_doc

                   POST 请求 :http://127.0.0.1:9200/索引名称/_doc/id(增加id唯一标识)

查询文档 :GET 请求 :http://127.0.0.1:9200/索引名称/_doc/id(主键查询)

                   GET 请求 :http://127.0.0.1:9200/索引名称/_search(全查询)

修改文档 : POST/PUT 请求 :http://127.0.0.1:9200/索引名称/_doc/id(全修改)

                    POST 请求 :http://127.0.0.1:9200/索引名称/_update/id(修改字段)

删除索引 :DELETE 请求:http://127.0.0.1:9200/索引名称/_doc/id

3.请求体查询

1.条件查询

2.查询全部

 

 3.分页查询

4.查询指定字段

 5.查询并排序

6.多条件查询

 

 

 7.范围查询

8.完全匹配

 

 9.高亮查询

 10.聚合查询

 4.映射关系

创建映射 :PUT 请求:http://127.0.0.1:9200/索引名称/_mapping

 数据说明 :

  • 字段名:任意填写,下面指定许多属性,例如:title、subtitle、images、price

  • type:类型,Elasticsearch 中支持的数据类型非常丰富,说几个关键的:

    • String 类型,又分两种:

      • text:可分词

      • keyword:不可分词,数据会作为完整字段进行匹配

    • Numerical:数值类型,分两类

      • 基本数据类型:long、integer、short、byte、double、float、half_float

      • 浮点数的高精度类型:scaled_float

    • Date:日期类型

    • Array:数组类型

    • Object:对象

  • index:是否索引,默认为 true,也就是说你不进行任何配置,所有字段都会被索引。

    • true:字段会被索引,则可以用来进行搜索

    • false:字段不会被索引,不能用来搜索

  • store:是否将数据进行独立存储,默认为 false

    • 原始的文本会存储在source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置"store": true 即可,获取独立存储的字段要比从_source 中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置。

  • analyzer:分词器,这里的 ik_max_word 即使用 ik 分词器,后面会有专门的章节学习

三,集群部署

1.配置

1.集群名字

 2.配置节点

 3.linux部署

解压软件

  # 解压缩
  tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz -C /opt/module
  # 改名
  mv elasticsearch-7.8.0 es

创建用户

  • 因为安全问题,Elasticsearch 不允许 root 用户直接运行,所以要创建新用户,在 root 用户中创建新用户。

  useradd es #新增 es 用户
  passwd es #为 es 用户设置密码
  userdel -r es #如果错了,可以删除再加
  chown -R es:es /opt/module/es #文件夹所有者

修改配置文件

  • 修改/opt/module/es/config/elasticsearch.yml 文件

  # 加入如下配置
  cluster.name: elasticsearch
  node.name: node-1
  network.host: 0.0.0.0
  http.port: 9200
  cluster.initial_master_nodes: ["node-1"]
  • 修改/etc/security/limits.conf

  # 在文件末尾中增加下面内容
  # 每个进程可以打开的文件数的限制
  es soft nofile 65536
  es hard nofile 65536
  • 修改/etc/security/limits.d/20-nproc.conf

  # 在文件末尾中增加下面内容
  # 每个进程可以打开的文件数的限制
  es soft nofile 65536
  es hard nofile 65536
  # 操作系统级别对每个用户创建的进程数的限制
  * hard nproc 4096
  # 注:* 带表 Linux 所有用户名称
  • 修改/etc/sysctl.conf

  # 在文件中增加下面内容
  # 一个进程可以拥有的 VMA(虚拟内存区域)的数量,默认值为 65536
  vm.max_map_count=655360
  • 重新加载

  sysctl -p

启动软件

  cd /opt/module/es/
  #启动
  bin/elasticsearch
  #后台启动
  bin/elasticsearch -d
  • 启动时,会动态生成文件,如果文件所属用户不匹配,会发生错误,需要重新进行修改用户和用户组。

  chown -R es:es /opt/module/es

  • 关闭防火墙

  #暂时关闭防火墙
  systemctl stop firewalld
  #永久关闭防火墙
  systemctl enable firewalld.service #打开放货抢永久性生效,重启后不会复原
  systemctl disable firewalld.service #关闭防火墙,永久性生效,重启后不会复原
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值