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上为3network.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 搜索入门技术之一相关推荐

  1. 京东搜索引擎技术-Elasticsearch快速入门

    一.简介 Elasticsearch是一个基于Lucence的搜索服务器.它提供了一个分布式的搜索引擎,基于restful web接口.广泛应用于云计算中,能够实时搜索,具有稳定,可靠,快速的特点. ...

  2. Elasticsearch从入门到精通 理论 集群 优化 框架集成

    Elasticsearch 入门 Elasticsearch 安装 下载软件 Elasticsearch 的官方地址:https://www.elastic.co/cn/ Elasticsearch ...

  3. 华为开发者大会HDC.Cloud技术探秘:云搜索服务技术实践

    搜索是一个古老的技术,从互联网发展的第一天开始,搜索技术就绽放出了惊人的社会和经济价值.随着信息社会快速发展,数据呈爆炸式增长,搜索技术通过数据收集与处理,满足信息共享与快速检索的需求.基于搜索技术, ...

  4. ELK之ElasticSearch快速入门

    ElasticSearch快速入门 一.简介 二.下载 三.启动 4.基本概念 5. 一.简介 官网:https://www.elastic.co/ ElasticSearch是Elastic Sta ...

  5. Elasticsearch 基础入门

    原文地址:Elasticsearch 基础入门 博客地址:http://www.extlight.com 一.什么是 ElasticSearch ElasticSearch是一个基于 Lucene 的 ...

  6. 【Elasticsearch】针对初学者的Elasticsearch搜索故障排除

    1.概述 翻译:Troubleshooting Elasticsearch searches, for Beginners 2.介绍 Elasticsearch最近的流行很大程度上是由于它的易用性.使 ...

  7. ElasticSearch第一讲:ElasticSearch从入门到精通

    ElasticSearch第一讲:ElasticSearch从入门到精通 业内目前来说事实上的一个标准,就是分布式搜索引擎一般大家都用elasticsearch.本文是ElasticSearch第一讲 ...

  8. ElasticSearch从入门到精通--第七话(自动补全、拼音分词器、自定义分词、数据同步方案)

    ElasticSearch从入门到精通–第七话(自动补全.拼音分词器.自定义分词.数据同步方案) 使用拼音分词 可以引入elasticsearch的拼音分词插件,地址:https://github.c ...

  9. 从提高 Elasticsearch 搜索体验说开去......

    Elasticsearch 最少必要知识实战教程直播回放 1.实战问题 球友提问:怎么搜索才能使得结果是最好的呢? 我这边一个搜索功能,实现做法就是将用ik分词器配合multi查询实现的. 中途也追加 ...

最新文章

  1. 【重磅】旷视提出MegDetV2:目标检测/实例分割新系统
  2. spark-1.5.2集群安装
  3. bgl 词典_器材屋 篇五十二:“哪里不会点哪里”的后时代——哪里不识扫哪里:科大讯飞扫描词典笔评测_点读机...
  4. 几个有用的ASP Function
  5. 数学--数论--康托展开与逆康托展开
  6. CVE-2016-0143 漏洞分析(2016.4)
  7. discuz 标签详解
  8. Gainlo 面试指南 翻译完成
  9. Android系统性能优化(68)---绘制优化
  10. global position
  11. C++ 的 allocator类 提供类型化的内存分配以及对象的分配和撤销
  12. springboot yml对于list列表配置方式
  13. Effective C++: lambda表达式与闭包.
  14. TryJquery- 14个jquery视频
  15. 计算机学报在线阅读,计算机研究与发展计算机学报软件学报电子学报西安交通大学学报.doc...
  16. 微分方程求通解推导-----专升本
  17. (译)Xposed模块开发教程
  18. 基于python Moviepy的视频字幕识别和合成!
  19. 模拟一个火车站售票小例子
  20. ByteBuffer的用法

热门文章

  1. 移动的宽带特别不好用,非常卡,怎么回事?
  2. UPS的红单和蓝单的区别
  3. Excel怎么样可以快速删除空白表
  4. 如何在小程序的wxml中书写函数逻辑,wxs的使用
  5. 分支和循环语句---循环语句
  6. 智能洗地机好不好用、洗地机和扫地机哪个实用?十大洗地机测评
  7. 系统里能看服务器型号,操作系统如何查看服务器型号
  8. 解决SVN文件不显示绿色小钩图标问题
  9. linux 下 FFmpeg 录制命令
  10. Kotlin入门之异步和并发