Elasticsearch技术详解与实战

基于lucene倒排索引

关键词索引,查询

处理语句(由Analyzer完成)

  1. 怎么处理单词的分割(逗号,空格,特殊字符)
  2. 过滤不必要的单词
  3. 统一大小写
  4. 一些单词的复数,进行时,过去时,统一处理
  5. .过滤标点符号

建立倒排索引(统计单词出现的评率,及所在的文章)

 

关键词文章号[出现频率]出现位置
guangzhou1[2][3,6]
live1[2],2[1][1,2]  [2]
shanghai2[1][3]
tom1[1][2]

 live 文章1出现了2次,文章2出现了1次

 

术语及概念

索引词(term)      能进行精确搜索

文本(text)        文本是一段普通的非结构化文字,文本会被分析成一个个索引词。当搜索时可以根据关键词进行查询,搜索出原文本

分析(analysis)      分析是将文本转换为索引词的过程,分析结构依赖于分词器

集群(cluster)      集群是由一个或多个节点组成,对外提供服务。 

节点(node)        是一个逻辑上独立的服务,是集群中的一部分

路由(routing)       当存储一个文档的时候,它会存在唯一的主分片,具体哪个分片是通过散列值进行选择的。默认情况下由文档ID生成

分片(shard)      是单个Lucene实例,索引是指向主分片和副分片的逻辑空间

主分片(primary sahrd)  默认情况下一个索引有5个分片,分片一旦建立,则分片的数量不能修改

副本分片(replica shard)  每一个分片有零个或多个副本

复制(replica)      避免单点问题,提高可用性

 

索引(index)      具有相同结构文档的集合(数据库)

类型(type)       一个索引下可以定义一个或多个类型(表)

文档(document)    存储在elasticsearch中的json格式字符串

映射(mapping)      定义了索引中每一个字段的类型

字段(field)      文档中包含零个或多个字段

来源字段(source field)   默认情况下原文档将会被存储在_source这个字段中,当你查询的时候也是返回这个字段

主键(ID)          文件的唯一标识,如果没有系统会自动生成一个

 

参数约定

通用参数

pretty          ?prettty      让返回的参数容易看(格式化json数据) 

human           ?human      统计数据

日期表达式       gt(大于) lt(小于)  

            +1h        增加一小时

            -1h        减少一个小时

            /h          上一个小时

            y(年) M(月) w(周) d(日) h(小时) m(分钟)  s(秒)

            now+1h      当前时间加一个小时

            now+1h+1m    当前时间加一个小时1分钟

            now+1h/d     当前时间加一个小时,四舍五入到最近一天

 

 相应过滤         通过filter_path来减少返回值的内容,多个值可以用逗号隔开(返回的是指定的内容)

             curl -XGET ‘127.0.0.1:9200/search?pretty&filter_path=took,hits.hists._id,hits._score’

 

Rest介绍

Rest请求头

Http方法数据处理说明
POSTCreate新增一个没有id的资源
GETRead取得一个资源
PUTUpdate更新一个资源,或新增一个含id的资源
DELETEDelete删除一个资源

 

 

 索引

创建索引

PUT http://localhost:9200/website/
{
	"settings":{
		"index":{
			"number_of_shards":3,
			"number_of_replicas":2
		}
	}
}

  获取索引信息

GET http://localhost:9200/secisland/

 

打开/关闭索引

打开/关闭索引接口允许关闭一个打开的索引或者打开一个关闭的索引。关闭的索引只能显示索引的元数据信息。不能进行读写操作

POST http://localhost:9200/secisland/_close 或者_open

 

增加映射

https://segmentfault.com/a/1190000008897731(注意6.0和之前版本的类型不同的问题)

https://blog.csdn.net/jianblog/article/details/54928286 (对一个field设置多种索引方式)

https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html  (6.x之后不支持多个mapping)

put http://tencent7:9200/secisland/
{
	"mappings":{
		"log":{
			"properties":{
				"message":{
					"type":"string"
				}
			}
		}
	}	
}
向secisland添加文档类型为log,包含字段message

6.x
{
"mappings":{ "log":{ "properties":{ "message":{ "type":"text", "analyzer": "standard" } } } } }

也可以这样

put http://tencent7:9200/secisland/_mapping/log/
{
"properties":{ "message":{ "type":"text", "analyzer": "standard" } } }

 

 

设置索引的多个type(如果要在type下面添加一个或多个属性使用上面的方法)

http://tencent7:9200/secisland/
{ "mappings":{ "user":{ "properties":{ "name":{ "first":{ "type":"string" } }, "user_id":{ "type":"string", "index":"not_analyzed" } } } } }
6.x
{
"mappings":{ "user":{ "properties":{ "user_id":{ "type":"text", "index": true }, "name":{ "properties":{ "lastname":{ "type":"text", "index": true } } } } } } }

 

 获取映射

GET http://localhost:9200/{index}/_mapping/{index}     {index}可以接受逗号分隔符也可以使用_all来表示全部索引

GET http://localhost:9200/secisland/_mapping/user      获取指定类型的映射

GET http://localhost:9200/_all/_mapping/user,skill

 

 索引别名(类似数据库的视图,用法也和直接查询索引一样)

 elasticsearch可以对一个或者多个索引指定别名,通过别名可以查询到一个或者多个索引的内容。elasticsearch会自动把别名映射到相应的索引上。在系统中别名不能重复,也不能喝索引名重复。

https://www.cnblogs.com/rainwang/p/6062650.html(介绍索引用法)

 

增加别名

http://tencent7:9200/_aliases
{
"actions":[{"add":{"index":"secisland","aliases":"aliases1"}}] }

 

删除别名

http://tencent7:9200/_aliases
{
    "actions":[{"remove":{"index":"secisland","aliases":"aliases1"}}]
}

 

 没有修改别名的语法,只有先删除后增加

一个别名关联多个索引

post http://tencent7:9200/_aliases
{
"actions":[{"add":{"indices":["secisland","secisland2"],"aliases":"aliases1"}}] }

 

过滤索引别名(只能看到被指定的)

post http://tencent7:9200/_aliases
{
"actions":[ { "add":{ "index":"test1", "alias":"alias2", "filter":{ "term":{ "user":"kimchy" } } } } ] }

 

路由

https://blog.csdn.net/u010454030/article/details/73554652  介绍路由的文章

别名也可以和路由相关联,一起使用

post http://tencent7:9200/_aliases
{
"actions":[ { "add":{ "index":"test2", "alias":"alias3", "filter":{ "term":{ "user":"kimchy" } }, "routing":"1" } } ] }

 

 删除别名

DELETE http://{host}:{port}/{index}/_alias/{name}

 

查询现有的别名

GET http://{host}:{port}/{index}/_alias/*

更新索引配置

put http://tencent5:9200/test1/_settings
{
"index":{ "number_of_replicas":2 } }

 

更新分词器(需要先关闭索引)

post http://tencent5:9200/test1/_close

post http://tencent5:9200/test1/_close

put http://tencent5:9200/test1/_settings
{
"analysis":{ "analyzer":{ "content":{ "type":"custom", "tokenizer":"whitespace" } } } }

post http://tencent5:9200/test1/_open

 

获取索引配置

get http://tencent5:9200/test1/_settings
http://tencent5:9200/test1/_settings

 

自定义分析器

测试分析器

post http://tencent5:9200/_analyze
{
"analyzer":"standard", "text":"this is a test" }

使用标准的分词器解析文档
"this is a test"
 
 

重建索引

https://www.jianshu.com/p/a46fc9fce199

http://donlianli.iteye.com/blog/1924721

索引分片

提供lucene索引所在的分片信息,可以用来提供分片和索引的更多统计信息

get http://tencent5:9200/xiaotao/_segments

              "_1" : {
                "generation" : 1,
                "num_docs" : 1,
                "deleted_docs" : 0,
                "size_in_bytes" : 4474,
                "memory_in_bytes" : 2212,
                "committed" : true,
                "search" : true,
                "version" : "7.2.1",
                "compound" : true,
                "attributes" : {
                  "Lucene50StoredFieldsFormat.mode" : "BEST_SPEED"
                }


_1            JSON文档的键名,代表分片的名称。这个名用来生成文档名,分片目录中所有以分片名开头的文档属于这个分片
generation        需要写新的分片时生成的一个数字,基本上是递增的。分片名从这个生成的数字派生出来
num_docs         存储在分片中没被删除的文档数量
delete_docs       存储在分片中被删除的文档数量。
size_in_bytes      用来表示使用的磁盘空间数量
memory_in_byte     分片需要一些数据存储在内存中使搜索更高效
commit          表示分片在磁盘上是否同步
search          分片是否可进行搜索
version         用来写这个分片lucene版本
compound         分片是否存储在符合文件中
 

 

 
 

状态管理 

清除缓存

post http://tencent5:9200/xiaotao/_cache/clear

 

索引刷新

post http://tencent5:9200/xiaotao/_refresh

 

索引冲洗

索引主要通过执行冲洗将数据保存到索引存储并且清除内部事务日志,以此来释放索引空间的内存空间

post http://tencent5:9200/xiaotao/_flush

 

文档管理

 

映射

概念

元字段: _index字段  _type字段  _id字段  _source字段

字段或属性:每个映射类型包含与类型相关的字段或属性列表。同一索引中不同映射类型的相同名称字段必须拥有相同的映射

数据类型

https://blog.csdn.net/chengyuqiang/article/details/79048800

字符串类型

string          从es5.x之后就不在支持string,由text和keyword替代

text           当一个字段要被全文搜索,设置为text会更加容易被分析

keyword           keyword适用于结构化的字段,keyword只能通过精确值搜索到

整数类型

byte           -128~127

short          -32768~32767

integer         -2^31~2^31-1

long          -2^63~2^63-1

浮点类型

double          64位双精度

float           32位单精度

half_float        16位半精度

scaled_float       缩放类型的浮点数

data类型

日期表现格式       "2018-01-13"

long类型的毫秒数     

integer的秒数

ip类型

ip类型用于存储IPV4或者IPV6地址

地理点数据类型

geo_point        

动态映射

字段和映射的类型可以在使用前不需要事先定义。依靠动态映射,通过索引文档,新的映射类型和字段名会自动添加

更新映射

除了记录之外,现有的映射类型和字段不能更新。修改映射意味着废弃已经索引的文档,应该根据映射创建新的索引并且重新索引数据

 

常见的元字段

https://blog.csdn.net/napoay/article/details/62233031 (常见属性的详解)

标识元字段

参数说明
_index文档所属的索引
_uid包含_type和_id的混合字段
_type文档的映射字段
_id文档的ID

 

文档来源元字段

参数说明
_source作为文档内容的原始JSON
_size_source元字段占用的字节数

 

索引元字段

参数说明
_all索引所有字段值
_field_names文档中所有包含非空值的字段
_timestamp关联文章的时间戳
_ttl文档被自动删除之前的存活时间

_all字段是一个特殊包含全部内容的字段,在一个大字符串中关联所有其他字段的值,使用空格作为分隔符,可以被分析和索引但不会被存储,使用_all字段可以对文档的值进行搜索而不要知道包含所需值的字段名

post http://tencent5:9200/milk/employee      先插入一段数据
{
"firstname":"Jhone", "lastname":"Smith", "data_of_birth":"1970-10-23" }


利用_all字段进行搜索
get http://tencent5:9200/milk/_search
{
  "query":{"match":{"_all":"john smith 1970"}}
}


但6.x不支持 _all
Enabling [_all] is disabled in 6.0. As a replacement, you can use [copy_to] on mapping fields to create your own catch all field.

路由元字段

参数说明
_parent用于在映射类型之间创建父子关系
_routing一个自定义的路由值,路由文档到一个特定的分片

 

_parent字段 6.x已经被移除

 

 

其他元字段

参数说明
_meta应用特定的元字段

转载于:https://www.cnblogs.com/xiaotao13725566749/p/9003028.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言 第1章 Elasticsearch入门 1 1.1 Elasticsearch是什么 1 1.1.1 Elasticsearch的历史 2 1.1.2 相关产品 3 1.2 全文搜索 3 1.2.1 Lucene介绍 4 1.2.2 Lucene倒排索引 4 1.3 基础知识 6 1.3.1 Elasticsearch术语及概念 6 1.3.2 JSON介绍 10 1.4 安装配置 12 1.4.1 安装Java 12 1.4.2 安装Elasticsearch 12 1.4.3 配置 13 1.4.4 运行 15 1.4.5 停止 17 1.4.6 作为服务 17 1.4.7 版本升级 19 1.5 对外接口 21 1.5.1 API约定 22 1.5 .2 REST介绍 25 1.5.3 Head插件安装 26 1.5.4 创建库 27 1.5.5 插入数据 28 1.5.6 修改文档 28 1.5.7 查询文档 29 1.5.8 删除文档 29 1.5.9 删除库 30 1.6 Java接口 30 1.6.1 Java接口说明 30 1.6.2 创建索引文档 33 1.6.3 增加文档 34 1.6.4 修改文档 35 1.6.5 查询文档 35 1.6.6 删除文档 35 1.7 小结 36 第2章 索引 37 2.1 索引管理 37 2.1.1 创建索引 37 2.1.2 删除索引 39 2.1.3 获取索引 39 2.1.4 打开/关闭索引 40 2.2 索引映射管理 41 2.2.1 增加映射 41 2.2.2 获取映射 44 2.2.3 获取字段映射 45 2.2.4 判断类型是否存在 46 2.3 索引别名 46 2.4 索引配置 51 2.4.1 更新索引配置 51 2.4.2 获取配置 52 2.4.3 索引分析 52 2.4.4 索引模板 54 2.4.5 复制配置 55 2.4.6 重建索引 56 2.5 索引监控 60 2.5.1 索引统计 60 2.5.2 索引分片 62 2.5.3 索引恢复 63 2.5.4 索引分片存储 64 2.6 状态管理 64 2.6.1 清除缓存 64 2.6.2 索引刷新 64 2.6.3 冲洗 65 2.6.4 合并索引 65 2.7 文档管理 66 2.7.1 增加文档 66 2.7.2 更新删除文档 69 2.7.3 查询文档 73 2.7.4 多文档操作 76 2.7.5 索引词频率 80 2.7.6 查询更新接口 83 2.8 小结 87 第3章 映射 88 3.1 概念 88 3.2 字段数据类型 90 3.2.1 核心数据类型 91 3.2.2 复杂数据类型 96 3.2.3 地理数据类型 100 3.2.4 专门数据类型 106 3.3 元字段 108 3.3.1 _all字段 109 3.3.2 _field_names字段 109 3.3.3 _id字段 110 3.3.4 _index字段 110 3.3.5 _meta字段 111 3.3.6 _parent字段 111 3.3.7 _routing字段 112 3.3.8 _source字段 114 3.3.9 _type字段 115 3.3.10 _uid字段 115 3.4 映射参数 116 3.4.1 analyzer参数 116 3.4.2 boost参数 118 3.4.3 coerce参数 119 3.4.4 copy_to参数 120 3.4.5 doc_values参数 121 3.4.6 dynamic参数 122 3.4.7 enabled参数 122 3.4.8 fielddata参数 123 3.4.9 format参数 126 3.4.10 geohash参数 128 3.4.11 geohash_precision参数 129 3.4.12 geohash_prefix参数 130 3.4.13 ignore_above参数 131 3.4.14 ignore_malformed参数 131 3.4.15 include_in_all参数 132 3.4.16 index参数 133 3.4.17 index_options参数 133 3.4.18 lat_lon参数 134 3.4.19 fields参数 135 3.4.20 norms参数 136 3.4.21 null_value参数 137 3.4.22 position_increment_gap参数 137 3.4.23 precision_step参数 138 3.4.24 properties参数 138 3.4.25 search_analyzer参数 139 3.4.26 similarity参数 140 3.4.27 store参数 141 3.4.28 term_vector参数 141 3.5 动态映射 142 3.5.1 概念 142 3.5.2 _default_映射 143 3.5.3 动态字段映射 143 3.5.4 动态模板 145 3.5.5 重写默认模板 148 3.6 小结 148 第4章 搜索 149 4.1 深入搜索 149 4.1.1 搜索方式 149 4.1.2 重新评分 153 4.1.3 滚动查询请求 155 4.1.4 隐藏内容查询 158 4.1.5 搜索相关函数 161 4.1.6 搜索模板 164 4.2 查询DSL 167 4.2.1 查询和过滤的区别 167 4.2.2 全文搜索 168 4.2.3 字段查询 179 4.2.4 复合查询 183 4.2.5 连接查询 188 4.2.6 地理查询 190 4.2.7 跨度查询 197 4.2.8 高亮显示 200 4.3 简化查询 203 4.4 小结 206 第5章 聚合 207 5.1 聚合的分类 207 5.2 度量聚合 209 5.2.1 平均值聚合 209 5.2.2 基数聚合 211 5.2.3 最大值聚合 213 5.2.4 最小值聚合 214 5.2.5 和聚合 214 5.2.6 值计数聚合 215 5.2.7 统计聚合 215 5.2.8 百分比聚合 215 5.2.9 百分比分级聚合 216 5.2.10 最高命中排行聚合 217 5.2.11 脚本度量聚合 217 5.2.12 地理边界聚合 221 5.2.13 地理重心聚合 222 5.3 分组聚合 223 5.3.1 子聚合 224 5.3.2 直方图聚合 226 5.3.3 日期直方图聚合 230 5.3.4 时间范围聚合 233 5.3.5 范围聚合 234 5.3.6 过滤聚合 235 5.3.7 多重过滤聚合 236 5.3.8 空值聚合 238 5.3.9 嵌套聚合 239 5.3.10 采样聚合 240 5.3.11 重要索引词聚合 242 5.3.12 索引词聚合 245 5.3.13 总体聚合 251 5.3.14 地理点距离聚合 251 5.3.15 地理散列网格聚合 253 5.3.16 IPv4范围聚合 255 5.4 管道聚合 257 5.4.1 平均分组聚合 259 5.4.2 移动平均聚合 261 5.4.3 总和分组聚合 262 5.4.4 总和累计聚合 262 5.4.5 最大分组聚合 264 5.4.6 最小分组聚合 265 5.4.7 统计分组聚合 266 5.4.8 百分位分组聚合 268 5.4.9 差值聚合 269 5.4.10 分组脚本聚合 273 5.4.11 串行差分聚合 275 5.4.12 分组选择器聚合 276 5.5 小结 277 第6章 集群管理 278 6.1 集群节点监控 278 6.1.1 集群健康值 278 6.1.2 集群状态 279 6.1.3 集群统计 280 6.1.4 集群任务管理 280 6.1.5 待定集群任务 281 6.1.6 节点信息 281 6.1.7 节点统计 282 6.2 集群分片迁移 283 6.3 集群节点配置 284 6.3.1 主节点 285 6.3.2 数据节点 286 6.3.3 客户端节点 286 6.3.4 部落节点 287 6.4 节点发现 287 6.4.1 主节点选举 288 6.4.2 故障检测 288 6.5 集群平衡配置 289 6.5.1 分片分配设置 289 6.5.2 基于磁盘的配置 290 6.5.3 分片智能分配 291 6.5.4 分片配置过滤 292 6.5.5 其他集群配置 293 6.6 小结 293 第7章 索引分词器 294 7.1 分词器的概念 294 7.2 中文分词器 298 7.3 插件 300 7.3.1 插件管理 301 7.3.2 插件安装 301 7.3.3 插件清单 302 7.4 小结 304 第8章 高级配置 305 8.1 网络相关配置 305 8.1.1 本地网关配置 305 8.1.2 HTTP配置 306 8.1.3 网络配置 307 8.1.4 传输配置 308 8.2 脚本配置 310 8.2.1 脚本使用 311 8.2.2 脚本配置 313 8.3 快照和恢复配置 318 8.4 线程池配置 324 8.5 索引配置 326 8.5.1 缓存配置 326 8.5.2 索引碎片分配 329 8.5.3 合并 332 8.5.4 相似模块 332 8.5.5 响应慢日志监控 333 8.5.6 存储 335 8.5.7 事务日志 336 8.6 小结 337 第9章 告警、监控和权限管理 338 9.1 告警 338 9.1.1 安装 338 9.1.2 结构 339 9.1.3 示例 352 9.1.4 告警输出配置 354 9.1.5 告警管理 355 9.2 监控 356 9.2.1 安装 356 9.2.2 配置 357 9.3 权限管理 360 9.3.1 工作原理 361 9.3.2 用户认证 361 9.3.3 角色管理 366 9.3.4 综合示例 368 9.4 小结 369 第10章 ELK应用 370 10.1 Logstash 370 10.1.1 配置 371 10.1.2 插件管理 374 10.2 Kibana配置 377 10.2.1 Discover 379 10.2.2 Visualize 381 10.2.3 Dashboard 383 10.2.4 Settings 386 10.3 综合示例 387 10.4 小结 390 附录 Elasticsearch 5.0的特性与改进 391

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值