Elasticsearch 是一个开源的分布式全文本搜索和分析引擎。它支持RESTful操作,并允许您实时存储,搜索和分析大量数据。
官方文档
Elasticsearch
ES Helper
官方下载链接
# 安装 dpkg -i elasticsearch-7.10.0-amd64.deb启动 停止 重启
sudo systemctl enable elasticsearch.service sudo systemctl start elasticsearch.service sudo systemctl stop elasticsearch.service sudo systemctl restart elasticsearch启用401验证
# 修改配置文件中 network.host 的值为 0.0.0.0 或指定IP sudo vim /etc/elasticsearch/elasticsearch.yml # 配置文件最后加上一下三行配置,开启401验证机制 xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.license.self_generated.type: basic设置用户密码
# 通过命令交互设置密码 elasticsearch-setup-passwords interactiveES 字段类型 元数据字段
metadata fields
_index 文档所属的索引_type 文档映射类型_id 文档唯一ID_source 文档正文的原始Json_size 源字段的字节大小,由映射大小插件提供_field_names 文档中所有非空值字段名_ignored 忽略不正常文档_routing 自定义路由,用于将文档路由到特定的分片_meta 程序特定的元数据 数据字段
Field data types
常规类型
binary base64编码的二进制数据boolean 布尔值(true, false)Keywords 关键字族
keyword 用于结构化内容,例如ID,电子邮件地址,主机名,状态代码,邮政编码或标签constant_keyword 常量关键字wildcard 模糊查询关键字 Numbers 数字类型
long 有符号长整型 64位integer 有符号整型 32位short 有符号短整型 16位byte 字节类型 8位double 双精度浮点型 64位float 单精度浮点型 32位half_float 半精度浮点型 16位scaled_float 缩放浮点数(其实是个整型)unsigned_long 无符号长整型 64位 Dates 日期类型
date 类型说明date_nanos 纳秒日期 类型说明 alias 别名,为已经存在的字段定义别名 对象关系类型
object Json对象flattened 单个字段值的Json对象nested Json对象,保留了子字段之间的关系join 为同一索引中的文档定义父/子关系 结构数据类型
Range 范围类型
integer_range 整型范围类型float_range 浮点数范围类型long_range 长整型范围类型double_range 双精度浮点数范围类型date_range 日期范围类型ip_range IP范围类型文档 ip IPv4和IPv6version 版本类型murmur3 Hash的计算和存储 聚合类型(Aggregate data types)
histogram 数值聚合 全文检索类型(Text search types)
text 非结构化文本annotated-text 包含特殊标记的文本completion 搜索自动补全search_as_you_type 自定义自动完成类型?token_count 标记计数? 文档排名类型(document ranking types)
dense_vector 记录浮点值的密集向量sparse_vector 记录浮点值的稀疏向量rank_feature 记录一个数字特性以提高查询时的命中率rank_features 记录数字特性以提高查询时的命中率 空间数据类型(Spatial data types)
geo_point 纬度和经度geo_shape 复杂的形状,如多边形point 任意笛卡尔点 什么是笛卡尔点shape 任意的笛卡尔几何图形 其他类型
percolator DSL编写的索引查询 新建MAPPINGS
文档
# MAPPING 结构
{"mappings": {"properties": {}}}
# 举个栗子
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" }
}
}
}
查询
叶子查询
match 分词查询term 精确匹配range 范围匹配
# 简单查询,举个栗子
{
"query": {
"match": {
"message": "this is a test"
}
}
}
复合查询
must 必须匹配,计分must_not 必须不匹配,计分filter 必须匹配,不计分should 应该匹配(对应OR)
# 举个栗子
{
"query": {
"bool" : {
"must" : {
"term" : { "user.id" : "kimchy" }
},
"filter": {
"term" : { "tags" : "production" }
},
"must_not" : {
"range" : {
"age" : { "gte" : 10, "lte" : 20 }
}
},
"should" : [
{ "term" : { "tags" : "env1" } },
{ "term" : { "tags" : "deployed" } }
],
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
脚本查询
文档
遇到的坑查询时不指定 size ES默认返回10条数据ES默认最多返回 10000 条数据should 和 must 并列使用,should 看起来不起作用,实际上是和 must 并列使用时 should 沦为了打分选项ES的批量插入真蛋疼,循环单条插入巨慢 报错处理
# 错误内容 the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured # 解决方案 vim /etc/sysctl.conf # 在最后添加 vm.max_map_count=655360 # 保存后执行 sysctl -p # 修改配置文件 elasticsearch.yml # 取消注释保留一个节点 cluster.initial_master_nodes: ["node-1"]



