【Elasticsearch】Elasticsearch学习文档

本文档详细介绍了Elasticsearch的使用,包括从下载安装、启动停止到配置验证,以及字段类型、查询方法和常见问题处理。重点讨论了各种字段类型,如元数据字段、数据字段(如关键字、数字、日期、全文检索类型等),并提到了查询中的叶子查询、复合查询和脚本查询。还分享了在实际操作中遇到的坑和报错处理经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Elasticsearch 介绍

Elasticsearch 是一个开源的分布式全文本搜索和分析引擎。它支持RESTful操作,并允许您实时存储,搜索和分析大量数据。
官方文档

官方 Python 库

Elasticsearch
ES Helper

下载 安装 Elasticsearch

官方下载链接

# 安装
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 interactive

ES 字段类型

元数据字段

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 日期类型
    • alias 别名,为已经存在的字段定义别名
  • 对象关系类型
    • object Json对象
    • flattened 单个字段值的Json对象
    • nested Json对象,保留了子字段之间的关系
    • join 为同一索引中的文档定义父/子关系
  • 结构数据类型
    • Range 范围类型
      • integer_range 整型范围类型
      • float_range 浮点数范围类型
      • long_range 长整型范围类型
      • double_range 双精度浮点数范围类型
      • date_range 日期范围类型
      • ip_range IP范围类型
      • 文档
    • ip IPv4和IPv6
    • version 版本类型
    • 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 条数据
  • shouldmust 并列使用,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"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值