**
elasticsearch介绍
**
有道云笔记
文档:elasticsearch.note
链接:http://note.youdao.com/noteshare?id=dbcad48557e3f29ba1757efa9855b1cd&sub=9D16FADECB714D0092CA85888AECB6C6
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。
Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。
Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。”Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。
什么原因使我们使用elasticsearch
mysql关系型数据库索引原理
数据库的索引是B+tree结构
主键是聚合索引 其他索引是非聚合索引,先从非聚合索引找,见下图
elasticsearch倒排索引原理
两者对比
对于倒排索引,要分两种情况:
基于分词后的全文检索
这种情况是es的强项,而对于mysql关系型数据库而言完全是灾难
因为es分词后,每个字都可以利用FST高速找到倒排索引的位置,并迅速获取文档id列表
但是对于mysql检索中间的词只能全表扫(如果不是搜头几个字符)
精确检索
这种情况我想两种相差不大,有些情况下mysql的可能会更快些
如果mysql的非聚合索引用上了覆盖索引,无需回表,则速度可能更快
es还是通过FST找到倒排索引的位置并获取文档id列表,再根据文档id获取文档并根据相关度算分进行排序,但es还有个杀手锏,即天然的分布式使得在大数据量面前可以通过分片降低每个分片的检索规模,并且可以并行检索提升效率
elasticsearch 安装
引用华为云的镜像下载 服务器下载秒速 7.3.0版本
ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D
logstash: https://mirrors.huaweicloud.com/logstash/?C=N&O=D
kibana: https://mirrors.huaweicloud.com/kibana/?C=N&O=D
ElasticSearch 文件目录
bin 启动文件
config 配置文件
elasticsearch.yml 主配置文件
默认端口 9200
jvm.options java虚拟机配置文件
建议更改虚拟机的运行 最小内存
log4j2.properties 日志配置文件
lib jar包
modules 功能模块
plugins 插件 (iK分词器)
启动 elasticsearch.bat
访问
本机访问 127.0.0.1::9200
elasticsearch head 管理工具安装
**
索引
**
假设ElasticSearch集群的部署结构如下:
通过该图, 记住下面的几个定义:
集群(cluster):由一个或多个节点组成, 并通过集群名称与其他集群进行区分
节点(node):单个ElasticSearch实例. 通常一个节点运行在一个隔离的容器或虚拟机中
索引(index):在ES中, 索引是一组文档的集合
分片(shard):因为ES是个分布式的搜索引擎, 所以索引通常都会分解成不同部分, 而这些分布在不同节点的数据就是分片. ES自动管理和组织分片, 并在必要的时候对分片数据进行再平衡分配, 所以用户基本上不用担心分片的处理细节,一个分片默认最大文档数量是20亿.
副本(replica):ES默认为一个索引创建5个主分片, 并分别为其创建一个副本分片. 也就是说每个索引都由5个主分片成本, 而每个主分片都相应的有一个copy.
对于分布式搜索引擎来说, 分片及副本的分配将是高可用及快速搜索响应的设计核心.主分片与副本都能处理查询请求, 它们的唯一区别在于只有主分片才能处理索引请求.
在上图示例中, 我们的ElasticSearch集群有两个节点, 并使用了默认的分片配置. ES自动把这5个主分片分配到2个节点上, 而它们分别对应的副本则在完全不同的节点上. 对,就这是分布式的概念.
记住, 索引的number_of_shards参数只对当前索引有效而不是对整个集群生效.对每个索引来讲, 该参数定义了当前索引的主分片数(而不是集群中所有的主分片数).
**
使用增删查改
**
创建索引
PUT luochen/shuxue/1
{
"id":"1",
"body":{
"title":"三角函数"
}
}
创建索引规则
PUT / problems# 索引名称 {
"settings": {#设置信息
"number_of_shards": 5,#主分片为5
"number_of_replicas": 1 # 复制分片数1
},
"mappings": { #映射信息
"discuss": { # 类型
"dynamic": "strict", #禁止添加新字段
"properties": {
"schoolPeriod": {
初中 "type": "keyword",
"index": "analyzed",
"analyzer": "standard"
}
}
}
}
}
获取索引信息
GET /problems/_mapping
修改文档
- 方法一
使用 post 在原文上修改 单独修改文档的一个字段内容 会影响其他数据
PUT luochen/shuxue/1
{
"id":"1",
"body":{
"title":"三角函数111111"
}
}
- 方法二
Update 方法 可以单独修改文档的一个字段内容 不影响其他数据
UPDATE luochen/shuxue/1
{
"id":"2"
}