ELK-ElasticSearch权威指南笔记

2023-05-16

ELK-ElasticSearch笔记

文章目录

    • ELK-ElasticSearch笔记
  • 前言
    • 测试工具
  • 语法
    • 索引,文档和类型
    • 文档元数据
    • 检索索引里文档数据
      • 查看当前节点的所有 Index
      • 查看所有index的mapping(映射)
      • 查看特定index的mapping
      • 搜索全部文档
      • 查询指定id文档
      • 检索文档的一部分
      • 查询字符串搜索
        • 下面搜索city是city:Yardville的文档
        • 多条件搜索,条件之间用+连接。
        • 必选项多条件搜索
        • _all字段
      • 使用DSL(特定领域语言)模拟查询字符串搜索.
    • 删除索引
      • 删除指定索引
      • 模糊匹配删除
      • 删除所有的索引
      • 删除7天前那天的索引
        • 删除10天前的所有索引
    • 更新文档里数据
    • 查询语句和过滤语句关系
    • 分析器
      • 功能
      • 分析器被使用时搜索过程
      • 设置使用的分析器
      • 测试分词器
        • 标准版本分词器
        • IK中文分词器
          • 最大分词器ik_max_word
          • 最小分词器

前言

记录学习ElasticSearch的关键语法知识,有助于我理解Elastic stach整个框架。
其中有些知识只是需要知道可了解,比如查询语法,因为我们会介绍Kibana或elasticSearch-head来管理ElasticSearch里的索引,没必需自己一点点写url查询,但这些知识我们还是要知道,因为网上很多文章用到。
学习资料

  1. ElasticSearch权威指南或者ElasticSearch权威指南

  2. Elasticsearch 基础入门

  3. 全文搜索引擎 Elasticsearch 入门教程

测试工具

关于网络请求,这里使用curl工具,当然也可以使用postman或小幺鸡。
关于curl-d 用于指定发送的数据,-X 用于指定发送数据的方式,-H 指定发送的数据类型(比如json格式为-H “Content-Type: application/json”

  1. get请求:curl -X GET www.baidu.com或者curl www.baidu.com
  2. put请求(下面内容可执行复制到linux上执行):
curl -H "Content-Type: application/json" -X PUT 'localhost:9200/accounts/person/1' -d '
{
  "user": "张三",
  "title": "工程师",
  "desc": "数据库管理"
}'

语法

假如elaseticsearch里有个索引为bank,类型为account。

索引,文档和类型

索引:Elastic 数据管理的顶层单位就叫做 Index(索引)
文档:Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。
类型:比如上面的account就是类型,是文档是分组。
再比如

{
  "accounts" : {
    "mappings" : {
      "person" : {
        "properties" : {
          "desc" : {
            "type" : "text",
            "analyzer" : "ik_max_word"
          },
          "title" : {
            "type" : "text",
            "analyzer" : "ik_max_word"
          },
          "user" : {
            "type" : "text",
            "analyzer" : "ik_max_word"
          }
        }
      }
    }
  }
}

索引是accounts,类型是person,文档是具体的每条数据

文档元数据

参考资料

  1. _index:文档存储的地方
  2. _type:文档代表的对象的类
  3. _id:文档的唯一标识
  4. _score:每个节点都有一个_score字段,这是相关性得分(relevance score),它衡量了文档与查询的匹配程度。
    请记住_index、_type、_id三者唯一确定一个文档

检索索引里文档数据

search API有两种表单:一种是“简易版”的查询字符串(query string)将所有参数通过查询字符串定义,另一种版本使用JSON完整的表示请求体(request body),这种富搜索语言叫做结构化查询语句(DSL)+

查看当前节点的所有 Index

curl -X GET 'http://localhost:9200/_cat/indices?v'

查看所有index的mapping(映射)

 curl -X GET localhost:9200/_mapping?pretty

查看特定index的mapping

 curl -X GET localhost:9200/bank/account/_mapping?pretty

搜索全部文档

curl -X GET localhost:9200/bank/account/_search

或者

curl -X GET localhost:9200/bank/account/_search?pretty

在任意的查询字符串中增加pretty参数,会让Elasticsearch美化输出(pretty-print)JSON响应以便更加容易阅读。_source字段不会被美化,它的样子与我们输入的一致。
后面不再强调。

查询指定id文档

curl -X GET localhost:9200/bank/account/222?pretty 

返回:

[root@localhost home]# curl -X GET localhost:9200/bank/account/222?pretty    
{
  "_index" : "bank",
  "_type" : "account",
  "_id" : "222",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "account_number" : 222,
    "balance" : 14764,
    "firstname" : "Rachelle",
    "lastname" : "Rice",
    "age" : 36,
    "gender" : "M",
    "address" : "333 Narrows Avenue",
    "employer" : "Enaut",
    "email" : "rachellerice@enaut.com",
    "city" : "Wright",
    "state" : "AZ"
  }
}

响应里有_source字段,它包含了在创建索引时我们发送给Elasticsearch的原始文档。

检索文档的一部分

通常,GET请求将返回文档的全部,存储在_source参数中。但是可能你感兴趣的字段只是title。请求个别字段可以使用_source参数。多个字段可以使用逗号分隔:
下面只显示_source里city字段内容

curl -X GET localhost:9200/bank/account/222?_source=city&pretty=true   

查询字符串搜索

参考检索文档
我们在请求中依旧使用_search关键字,然后将查询语句传递给参数q=

下面搜索city是city:Yardville的文档

 curl -X GET localhost:9200/bank/account/_search?q=city:Yardville

多条件搜索,条件之间用+连接。

 curl -X GET localhost:9200/bank/account/_search?q=city:Yardville+employer:Asimiline

必选项多条件搜索

上面是两个条件是可选的。单独某项的city或employer都会被匹配,必选条件就是条件前加上+号。"+“前缀表示语句匹配条件必须被满足。类似的”-"前缀表示条件必须不被满足。所有条件如果没有+或-表示是可选的——匹配越多,相关的文档就越多。

 curl -X GET localhost:9200/bank/account/_search?q=%2bcity:Yardville+%2bemployer:Asimiline

%2b是+号的url编辑,必需使用%2b代替+前缀

_all字段

这个字段很牛叉。学习路径
当你索引一个文档,Elasticsearch把所有字符串字段值连接起来放在一个大字符串中,它被索引为一个特殊的字段_all,若没有指定字段,查询字符串搜索(即q=xxx)使用_all字段搜索。

使用DSL(特定领域语言)模拟查询字符串搜索.

下面语句可直接复制到linux命令行执行。

curl -H "Content-Type: application/json" -X GET localhost:9200/bank/account/_search -d ' {
    "query":
        {"match":
           {
             "city":"Yardville"
             }
         }
   }'

全文搜索短语搜索高亮我们的搜索可参考检索文档

删除索引

以索引dongli-2019-03-01到dongli-2019-03-15为例

删除指定索引

 curl -XDELETE -u elastic:changeme http://localhost:9200/dongli-2019-03-02

删除多个指定索引,中间用逗号隔开

 curl -XDELETE -u elastic:changeme http://localhost:9200/dongli-2019-03-02,dongli-2019-03-04

模糊匹配删除

curl -XDELETE -u elastic:changeme http://localhost:9200/dongli-*

删除所有的索引

curl -XDELETE http://localhost:9200/_all
     或 
 curl -XDELETE http://localhost:9200/*

_all ,* 通配所有的索引
通常不建议使用通配符,误删了后果就很严重了,所有的index都被删除了
禁止通配符为了安全起见,可以在elasticsearch.yml配置文件中设置禁用_all和通配符
action.destructive_requires_name = true
这样就不能使用_all和

删除7天前那天的索引

根据索引名称后面的日期,删除指定日期的索引

#!/bin/bash
time=$(date -d '-7 days' +'%Y.%m.%d')
curl -XDELETE -u elastic:changeme http://localhost:9200/*-${time}

删除10天前的所有索引

根据索引名称后面的日期,删除7天前的所有索引。
它和上面算法类型都是根据索引名称计算日期的,如果索引没日期,那么只有手动删除

#!/bin/bash

###################################
#删除早于十天的ES集群的索引
###################################
function delete_indices() {
    comp_date=`date -d "10 day ago" +"%Y-%m-%d"`
    date1="$1 00:00:00"
    date2="$comp_date 00:00:00"

    t1=`date -d "$date1" +%s` 
    t2=`date -d "$date2" +%s` 

    if [ $t1 -le $t2 ]; then
        echo "$1时间早于$comp_date,进行索引删除"
        #转换一下格式,将类似2017-10-01格式转化为2017.10.01
        format_date=`echo $1| sed 's/-/\./g'`
        curl -XDELETE http://localhost:9200/*$format_date
    fi
}

curl -XGET http://localhost:9200/_cat/indices | awk -F" " '{print $3}' | awk -F"-" '{print $NF}' | egrep "[0-9]*\.[0-9]*\.[0-9]*" | sort | uniq  | sed 's/\./-/g' | while read LINE
do
    #调用索引删除函数
    delete_indices $LINE
done

更新文档里数据

文档在Elasticsearch中是不可变的——我们不能修改他们
在内部,Elasticsearch已经标记旧文档为删除并添加了一个完整的新文档。旧版本文档不会立即消失,但你也不能去访问它。Elasticsearch会在你继续索引更多数据时清理被删除的文档
通过api能更新是完成如下过程

  1. 从旧文档中检索JSON
  2. 修改它
  3. 删除旧文档
  4. 索引新文档

比如

curl -H "Content-Type: application/json" -X PUT 'localhost:9200/bank/account/25' -d '
{
    "city" : "666"
}'

查询语句和过滤语句关系

查询与过滤
我们可以使用两种结构化语句: 结构化查询(Query DSL)和结构化过滤(Filter DSL)
过滤:一条过滤语句会询问每个文档的字段值是否包含着特定值
查询:查询语句会询问每个文档的字段值与特定值的匹配程度如何
原则上来说,使用查询语句做全文本搜索或其他需要进行相关性评分的时候,剩下的全部用过滤语句

对于准确值,你需要使用过滤器。过滤器的重要性在于它们非常的快。
理解查询和过滤,有助于我们使用Kibana。

分析器

功能

分析器主要是对数据处理,将之分词后,再标记。
分析(analysis)是这样一个过程:

  1. 首先,标记化一个文本块为适用于倒排索引单独的词(term)
  2. 然后标准化这些词为标准形式,提高它们的“可搜索性”或“查全率”

它包含3个功能,分别是字符过滤器,分词器,标记过滤,具体参考分析和分析器

分析器被使用时搜索过程

  1. 当你查询全文(full text)字段,查询将使用相同的分析器来分析查询字符串,以产生正确的词列表。
  2. 当你查询一个确切值(exact value)字段,查询将不分析查询字符串,但是你可以自己指定。

设置使用的分析器

映射,配置分析器
string类型的字段,默认的,考虑到包含全文本,它们的值在索引前要经过分析器分析,并且在全文搜索此字段前要把查询语句做分析处理。
对于string字段,两个最重要的映射参数是index和analyer。

测试分词器

在查询字符串参数中指定要使用的分析器,被分析的文本做为请求体

标准版本分词器

curl -H 'Content-Type: application/json' -X GET "localhost:9200/_analyze?pretty"  -d'
{
  "analyzer" : "standard",
  "text" : "List is empty" 
}'

结果如下

[root@localhost home]# curl -H 'Content-Type: application/json' -X GET "localhost:9200/_analyze?pretty"  -d'
{
  "analyzer" : "standard",
  "text" : "List is empty" 
}'
{
  "tokens" : [
    {
      "token" : "list",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "is",
      "start_offset" : 5,
      "end_offset" : 7,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "empty",
      "start_offset" : 8,
      "end_offset" : 13,
      "type" : "<ALPHANUM>",
      "position" : 2
    }
  ]
}

IK中文分词器

最大分词器ik_max_word
curl -H 'Content-Type: application/json' -X GET "localhost:9200/_analyze?pretty"  -d'
{
  "analyzer" : "ik_max_word",
  "text" : "我是中国人" 
}'

结果如下

[root@localhost home]# curl -H 'Content-Type: application/json' -X GET "localhost:9200/_analyze?pretty"  -d'
> {
>   "analyzer" : "ik_max_word",
>   "text" : "我是中国人" 
> }'
{
  "tokens" : [
    {
      "token" : "我",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "是",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "中国人",
      "start_offset" : 2,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "中国",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "国人",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 4
    }
  ]
}
最小分词器
curl -H 'Content-Type: application/json' -X GET "localhost:9200/_analyze?pretty"  -d'
{
  "analyzer" : "ik_smart",
  "text" : "我是中国人" 
}'

结果如下ik_smart

[root@localhost home]# curl -H 'Content-Type: application/json' -X GET "localhost:9200/_analyze?pretty"  -d'
> {
>   "analyzer" : "ik_smart",
>   "text" : "我是中国人" 
> }'
{
  "tokens" : [
    {
      "token" : "我",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "是",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "中国人",
      "start_offset" : 2,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 2
    }
  ]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ELK-ElasticSearch权威指南笔记 的相关文章

随机推荐

  • 一文详解js闭包,初学者也能学会的闭包

    目录 一 前提知识 xff1a 变量的作用域 二 闭包的理解 三 闭包的作用 四 常见的闭包使用形式 五 闭包的生命周期 六 注意事项 一 前提知识 xff1a 变量的作用域 变量的作用域分为全局作用域和局部作用域 xff0c 也就是全局变
  • 前端面试高频题目总结(二):javascript(附详解)

    目录 1 js内存泄漏与垃圾回收机制的原理 概念 js垃圾回收机制原理 2 构造函数 new 实际发生了什么 xff1f 3 什么是XSS攻击 xff1f XSS概念 XSS危害 XSS分类 XSS预防 4 什么是CSRF攻击 xff1f
  • 面试官必问系列:手写发布-订阅模式和观察者模式

    目录 前言 1 发布 订阅模式 定义 手写发布 订阅模式 2 观察者模式 定义 手写观察者模式 3 二者的根本区别 前言 发布 订阅者模式和观察者模式是两种设计模式 xff0c 本质相同 xff0c 但是也有区别 xff0c 在Vue中有不
  • 这9种数组去重方法,直到今天,我才彻底弄懂

    目录 方法一 最常使用 xff0c 也最容易想到的思路 xff08 ES5 xff09 方法二 ES6 Set 去重 xff08 ES6 中最常用 xff09 方法三 使用 indexOf 去重 方法四 使用 sort 排序去重 方法五 使
  • 读完这篇文章,我真的在下班前几分钟学会了JS的5种for循环的差异

    目录 前言 正文 一 角色介绍 1 for 2 forEach 3 map 4 for in 5 for of 二 使用差异 1 场景差异 2 能力差异 三 性能比较 四 使用建议 前言 for 循环 在平时的前端开发中使用频率很高 xff
  • 当面试官问 promise 的时候,他们希望听到什么(一)

    基础知识 1 同步回调和异步回调的区别 同步回调 理解 立即执行 完全执行完了才结束 不会放入回调队列中 例子 数组遍历相关的回调函数 Promise 的 executor 执行器函数 异步回调 理解 不会立即执行 会放入回调队列中将来执行
  • 当面试官问 promise 的时候,他们希望听到什么(二)

    目录 前言 一 前提知识 1 JS 单线程机制 2 JS 任务队列与事件循环 3 Promise 回顾 二 题目实战 1 开头提到的题目 2 稍有难度 3 挑战升级 前言 上一篇文章 xff0c 当面试官问 promise 的时候 xff0
  • JS 防抖与节流的原理分析和代码手写

    目录 前言 作用 防抖 使用场景 分析原理 手写代码 节流 使用场景 原理分析 手写代码 小补充 前言 前一段时间 xff0c 我学习了 JS 的防抖与节流 xff0c 自认为掌握住了它们 xff0c 当我在做面试题的时候 xff0c 遇到
  • ELK-日志收集系统在Centos上环境安装

    ELK 日志收集系统在Centos上环境安装 文章目录 ELK 日志收集系统在Centos上环境安装 前言安装elastcsearch6 5 4安装准备学习资料启动创建新用户取掉只能本机访问的配置配置跨域访问启动命令测试 安装分词ik安装e
  • Linux环境下下载pydicom

    Linux中只要使用命令即可 sudo pip install pydicom 如果出现sudo xff1a pip xff1a command not found 把sudo去掉 xff0c 再操作一次 因为在执行Linux命令时 xff
  • C语言编程实现汉诺塔问题

    C语言编程实现汉诺塔问题 1 首先解释一下 xff0c 汉诺塔问题 xff1a 古代梵塔内有A B C3个座 xff0c 开始时A座上面有64个盘子 xff0c 盘子大小不等 xff0c 大的在下 xff0c 小的在上 一个老和尚想把64个
  • ORA-28000: the account is locked

    原因 xff1a Oracle账户多次以错误密码登录 xff0c 导致数据库服务器宕机 xff0c 账户被锁定 以系统账户sys 登录Oracle xff0c 查看sql SELECT FROM DBA PROFILES WHERE RES
  • Docker镜像编译方式

    1 普通Dockerfile的缺点 我们通常情况下要编译Spring Boot的Docker镜像 xff0c 一般会写一个下面这样的Dockerfile FROM openjdk span class token operator span
  • Python入门第一章笔记 从安装到编写hello world

    1 下载Python安装包 xff1b 可以到官网下载 xff1a https www python org 但是如果没有翻墙的话 xff0c 下载会很慢 25M安装包 xff0c 需要1个小时以上 如果没有耐心等可以在csdn进行下载 x
  • 养老产业政策链接

    江西省养老政策文件 xff1a 江西省养老服务条例 http mzw ganzhou gov cn gzsmzjy c103172 202201 d238525b35bb47b49b3de312c9b63a60 shtml 南昌市养老服务体
  • 我多变的2013

    我多变的2013 第一篇 xff1a 回顾 回顾工作 首先简单的做个自我介绍吧 xff0c 我是87年的 xff0c 北漂已经是第5个年头了 xff0c 一直都从事java开发工作 前后只换过一家公司 xff0c 第一家待了近两年 xff0
  • 我花1200大洋所学的“元学习课”究竟学了些什么?

    我花1200大洋所学的 元学习课 究竟学了些什么 xff1f 讲课的是台湾的一位大牛名叫Xdite xff0c 以及亿万富豪李笑来 能够跟牛人学习怎么学习我想应该不会有错吧 xff0c 对我来说这次做的应该是一次正确的决定 xff0c 所谓
  • 成长记录-开启我的新生 (2016-12-06)

    真的是很惊险 xff0c 我差一点就错过了 获得新生 的机会 xff0c 我在蜻蜓音频中听到了逻辑思维 xff0c 从逻辑思维中了解到了 得到 xff0c 从 得到 中订阅了吴军博士的 硅谷来信 xff0c 却在过去的好几个月里 xff0c
  • 最新Java电子书

    最新Java电子书 JAVA参考大全 J2SE 5EDITION 世界级程序设计大师作品 Thinking in Java第三版 43 第四版 xff08 中文版 43 习题答案 xff09 Java数据库高级编程宝典 Java核心技术第八
  • ELK-ElasticSearch权威指南笔记

    ELK ElasticSearch笔记 文章目录 ELK ElasticSearch笔记 前言测试工具 语法索引 xff0c 文档和类型文档元数据检索索引里文档数据查看当前节点的所有 Index查看所有index的mapping 映射 查看