Elasticsearch 搜索入门技术之一

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch 搜索入门技术之一

1,课程回顾
2,本章重点

什么是全文检索,常用全文检索框架的基本原理是什么

es是什么,主要使用场景

es分布式搜索引擎集群的搭建

3,具体内容
3.1 全文检索

3.1.1 数据分类

我们生活中的数据总体分为三种:结构化数据,非结构化数据,半结构化数据

结构化数据:指具有固定格式或有限长度的数据,如数据库(mysql oracle …),元数据等。

非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等

半结构化数据,如XML,HTML等

非结构化数据又一种叫法叫全文数据。

对结构化数据的搜索:如对数据库的搜索,用SQL语句。

对元数据的搜索,如利用windows搜索对文件名,类型,修改时间进行搜索等。

对非结构化数据的搜索:如利用windows的搜索也可以搜索文件内容,Linux下的grep命令,再如用Google和百度可以搜索大量内容数据。

3.1.2 非结构化数据搜索方法

顺序扫描:

比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。

如利用windows的搜索也可以搜索文件内容,只是相当的慢。如果你有一个500G硬盘,如果想在上面找到一个内容包含某字符串的文件,不花他几个小时,怕是做不到。Linux下的grep命令也是这一种方式。大家可能觉得这种方法比较原始,但对于小数据量的文件,这种方法还是最直接,最方便的。但是对于大量的文件,这种方法就很慢了。

全文检索( 倒排索引es的核心):将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。

这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。

这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。(实际参考es中文档)

3.2 什么是 Elasticsearch?

官网:

https://www.elastic.co/cn/

https://www.elastic.co/cn/what-is/elasticsearch

Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是适用于数据采集、充实、存储、分析和可视化的一组开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。

3.3 用途:

Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,这意味着其可用于多种用例:

应用程序搜索

网站搜索

企业搜索

日志处理和分析

基础设施指标和容器监测

应用程序性能监测

地理空间数据分析和可视化

安全分析

业务分析

3.4 基本概念:

https://www.elastic.co/guide/en/elasticsearch/reference/6.0/_basic_concepts.html

近实时 near realtime(nrt)

Elasticsearch是一个几乎实时的搜索平台。意思是,从索引一个文档到这个文档可被搜索只需要一点点的延迟,这个时间一般为毫秒级。

cluster 集群

群集是一个或多个节点(服务器)的集合, 这些节点共同保存整个数据,并在所有节点上提供联合索引和搜索功能。一个集群由一个唯一集群ID确定,并指定一个集群名(默认为“elasticsearch”)。该集群名非常重要,因为节点可以通过这个集群名加入群集,一个节点只能是群集的一部分。

node 节点

节点是单个服务器实例,它是集群的一部分,可以存储数据,并参与群集的索引和搜索功能。就像一个集群,节点的名称默认为一个随机的通用唯一标识符(UUID),确定在启动时分配给该节点。如果不希望默认,可以定义任何节点名。

index 索引

索引是具有相似特性的文档集合。例如,可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。就像关系数据库中的“数据库”。它有一个定义多种类型的映射。索引是逻辑名称空间,映射到一个或多个主分片,并且可以有零个或多个副本分片。

document 文档

文档是可以被索引的信息的基本单位。也是全文搜索中被搜索的对象,可以对应一个网页,一篇txt文档或者一个商品。 相当于关系型数据库中的表中的一行记录。例如,您可以为单个客户提供一个文档,单个产品提供另一个文档,以及单个订单提供另一个文档。es本文件的表示形式为JSON(JavaScript Object Notation)格式,这是一种非常普遍的互联网数据交换格式。似于关系数据库中的一行。

文档和索引的关系原理讲解:

文档(txt,doc,docx…):

1, 人生永远不可能复制,要珍惜每一份缘分 a.txt

2, 珍惜人生的每次相遇,就是缘分 b.txt

3, 人生中存在很多相遇和离别,都是缘分中的注定 c.txt

提取关键字(https://www.elastic.co/guide/cn/elasticsearch/guide/current/stopwords.html使用中文分词技术 排除停用词https://wenku.baidu.com/view/8927eede80eb6294dd886c46.html

1, 人生 永远 复制 珍惜 缘分

2, 珍惜 人生 相遇 缘分

3, 人生 存在 相遇 离别 缘分 注定

创建索引

人生 -> 1,2,3

永远 -> 1

复制 1

珍惜 1,2

缘分 1,3

。。。。
倒排索引又叫反向索引(右下图)以字或词为文档中出现的位置情况。
    shards   replicas 碎片和副本 
shards:分片数,一个索引分几个片存储,多个分片可以提升读写速度。索引可以存储大量的数据,这些数据可能(分片解决)超过单个节点的硬件限制。例如,十亿个文件占用磁盘空间1TB的单指标可能不适合对单个节点的磁盘或可能太慢服务仅从单个节点的搜索请求。
replicas:
   副本数量,分多个副本存储索引,好处是防止一个节点挂掉,数据丢失(防止单点故障)。
   它在碎片/节点出现故障时提供高可用性(提高可用性)。
   它允许您扩展搜索量/吞吐量,因为可以在所有副本上并行执行搜索(提高搜索速度)。

3.5 下载配置,搭建集群:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.tar.gz

或者:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.tar.gz

集群规划:

es1 192.168.23.71

es2 192.168.23.72

es3 192.168.23.73

解压:

tar -zxvf elasticsearch-6.4.0.tar.gz -C /usr/

修改名称

mv /usr/elasticsearch-6.4.0/ /usr/elasticsearch/

配置环境变量:

vim /etc/porfile

添加配置

export ES_HOME=/usr/elasticsearch

修改配置:

PATH=$ES_HOME/bin

让配置生效:

source /etc/profile

es配置:

1,在/usr/elasticsearch创建数据data,后面配置用到:

mkdir /usr/elasticsearch/data

2,在/etc/sysctl.conf最后添加(解决:max virtual memory areas vm.max_map_count [65530] is too low错误,vm.max_map_count单个JVM能开启的最大线程数)

vim /etc/sysctl.conf

vm.max_map_count=655360

让文件生效:

sysctl -p

3,在/etc/security/limits.conf最后添加:(不配置缺省值:1024,解除 Linux 系统的最大进程数和最大文件打开数限制:* 代表针对所有用户 ues表示启动用户名称,与下面创建用户一致 noproc 是代表最大进程数 nofile 是代表最大文件打开数 )

vim /etc/security/limits.conf

ues soft nofile 65536

ues hard nofile 131072

ues soft nproc 4096

ues hard nproc 4096

4,修改节点的配置文件jvm.options

vim /usr/elasticsearch/config/jvm.options (22行)

-Xms512m

-Xmx512m

原则:

最小堆的大小和最大堆的大小应该相等。

Elasticsearch可获得越多的堆,并且内存也可以使用更多的缓存。但是需要注意,分配了太多的堆给你的项目,将会导致有长时间的垃圾搜集停留。

设置最大堆的值不能超过你物理内存的50%,要确保有足够多的物理内存来保证内核文件缓存。

5,修改配置文件 ElasticSearch.yml

vim /usr/elasticsearch/config/elasticsearch.yml

# ======================== Elasticsearch Configuration =========================

NOTE: Elasticsearch comes with reasonable defaults for most settings.

Before you set out to tweak and tune the configuration, make sure you

understand what are you trying to accomplish and the consequences.

The primary way of configuring a node is via this file. This template lists

the most important settings you may want to configure for a production cluster.

Please consult the documentation for further information on configuration options:

https://www.elastic.co/guide/en/elasticsearch/reference/index.html

---------------------------------- Cluster -----------------------------------

Use a descriptive name for your cluster:

17行

cluster.name: my-app

------------------------------------ Node ------------------------------------

Use a descriptive name for the node:

#23行

node.name: node-1

Add custom attributes to the node:

#node.attr.rack: r1

----------------------------------- Paths ------------------------------------

Path to directory where to store the data (separate multiple locations by comma):

33

path.data: /usr/elasticsearch/data

Path to log files:

37

path.logs: /usr/elasticsearch/logs

----------------------------------- Memory -----------------------------------

Lock the memory on startup:

#锁定物理内存地址,防止elasticsearch内存被交换出去,也就是避免es使用swap交换分区

43 44

bootstrap.memory_lock: false

#是否支持过滤掉系统调用,Elasticsearch安装各种各样的系统调用过滤依赖于操作系统(如:Linux上的seccomp)。如果成功安装与启用了系统调用过滤,将能够防御一些对Elasticsearch调用的攻击行为。要想通过此检查,你必须根据日志来修复任何阻止系统调用过滤的系统错误,或者通过配置bootstrap.system_call_filter为false来禁用系统调用过滤然后你自己做风控。

bootstrap.system_call_filter: false

Make sure that the heap size is set to about half the memory available

on the system and that the owner of the process is allowed to use this

limit.

Elasticsearch performs poorly when the system is swapping the memory.

---------------------------------- Network -----------------------------------

Set the bind address to a specific IP (IPv4 or IPv6):

#56

network.host: 192.168.23.30

Set a custom port for HTTP:

#60

http.port: 9200

For more information, consult the network module documentation.

--------------------------------- Discovery ----------------------------------

Pass an initial list of hosts to perform discovery when new node is started:

The default list of hosts is [“127.0.0.1”, “[::1]”]

#当启动新节点时,通过这个ip列表进行节点发现,组建集群 69

discovery.zen.ping.unicast.hosts: [“cr1”, “cr2”,“cr3”]

Prevent the “split brain” by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):

#通过配置这个参数来防止集群脑裂现象 (集群总节点数量/2)+1 73

discovery.zen.minimum_master_nodes: 2

For more information, consult the zen discovery module documentation.

---------------------------------- Gateway -----------------------------------

Block initial recovery after a full cluster restart until N nodes are started:

#gateway.recover_after_nodes: 3

For more information, consult the gateway module documentation.

---------------------------------- Various -----------------------------------

Require explicit names when deleting indices:

#action.destructive_requires_name: true

因为配置文件中配置了集群节点的主机名称,所以在/etc/hosts添加下面配置:

vim /etc/hosts

192.168.23.21 es1

192.168.23.22 es2

192.168.23.23 es3

6,由于es启动不能直接使用root用户

创建用户:

useradd ues;

赋权:

chown -R ues:ues /usr/elasticsearch

查看:

ll /usr/ |grep elasticsearch

ll /usr

ll /usr/elasticsearch

复习免密:

ssh-keygen -t rsa 三次回车

ssh-copy-id es2 yes 输入密码:tiger

ssh-copy-id es3 yes 输入密码:tiger

7,发送配置好的es到其他节点上:

cd /usr/

直接使用scp命令, 之前配置过ssh免密登录

scp -r /usr/elasticsearch/ cr2:/usr/

scp -r /usr/elasticsearch/ cr3:/usr/

8,在其他节点修改配置及创建用户并赋权(当前集群在cr2和cr3上操作)

发送hosts:

scp /etc/hosts es2:/etc/

scp /etc/hosts es3:/etc/

发送环境变量

scp /etc/profile cr2:/etc/

scp /etc/profile cr3:/etc/

发送/etc/sysctl.conf

scp /etc/sysctl.conf cr2:/etc/

scp /etc/sysctl.conf cr3:/etc/

发送 /etc/security/limits.conf

scp /etc/security/limits.conf cr2:/etc/security/

scp /etc/security/limits.conf cr3:/etc/security/

在cr2和cr3上操作(或者在all session):

让文件生效:

sysctl -p

让环境变量生效:

source /etc/profile

vim /usr/elasticsearch/config/elasticsearch.yml
           分别修改23和56行
            node.name: node-2    //cr3上为3
            network.host: 192.168.23.31  //cr3上为32
             创建用户:
   useradd ues;

赋权:

chown -R ues:ues /usr/elasticsearch

查看:

ll /usr/ |grep elasticsearch

启动:

切换到ues用户

su ues;

在to All Sessions中启动:

elasticsearch -d;

查看结果:

curl 192.168.23.31:9200

三个IP都可以测试链接

还可以测试挂掉节点,再启动,注意,启动时速度不会快,可以看着日志

3.5 常用集群命令

查看集群支持命令:

curl 192.168.23.30:9200/_cat

查看集群是否健康

curl 192.168.23.30:9200/_cat/health

curl 192.168.23.30:9200/_cat/health?v

绿色表示一切正常, 黄色表示所有的数据可用但是部分副本还没有分配,红色表示不可用

查看master:

curl 192.168.23.30:9200/_cat/master?v

命令支持help:

curl 192.168.23.30:9200/_cat/master?help

查看所有索引:

curl 192.168.23.30:9200/_cat/indices

4,知识点总结

5,本章面试题

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
3月前
|
存储 JSON 自然语言处理
Elasticsearch 利用API进行搜索
Elasticsearch 利用API进行搜索
36 0
|
2月前
|
JSON Prometheus Cloud Native
Grafana 系列 - 统一展示 -8-ElasticSearch 日志快速搜索仪表板
Grafana 系列 - 统一展示 -8-ElasticSearch 日志快速搜索仪表板
|
29天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
79 0
|
2月前
|
存储 关系型数据库 MySQL
ElasticSearch 入门
【2月更文挑战第7天】ElasticSearch 入门 简介 ElasticSearch 的基本概念 ElasticSearch 的查询流程 ElasticSearch 的更新流程
37 2
|
2月前
|
存储 自然语言处理 搜索推荐
ElasticSearch入门篇
ElasticSearch入门篇
|
2月前
|
存储 自然语言处理 负载均衡
【Elasticsearch专栏 03】深入探索:Elasticsearch倒排索引是如何提高搜索效率的
倒排索引通过直接关联文档内容,将关键词映射到相关文档,减少扫描范围,并使用高效数据结构快速查找和匹配关键词,从而显著提高搜索效率。此外,它支持复杂查询操作和搜索结果优化,进一步提高搜索的准确性和用户满意度。
|
2月前
|
存储 缓存 自然语言处理
Elasticsearch中FST与前缀搜索
Elasticsearch中FST与前缀搜索
26 0
|
2月前
|
JSON 前端开发 API
【Elasticsearch】搜索结果处理和RestClient查询文档
【Elasticsearch】搜索结果处理和RestClient查询文档
338 0
|
2月前
|
缓存 Java API
在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)
在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)
|
3月前
|
存储 自然语言处理 Java
Elasticsearch全文搜索技术之二kibana的简介和使用
Elasticsearch全文搜索技术之二kibana的简介和使用
29 2

热门文章

最新文章