kibana es 语法纪录 elaticsearch

[复制链接]
发表于 2025-5-4 11:53:06 | 显示全部楼层 |阅读模式
目录

一、认识elaticsearch
1、什么是正向索引
2、什么是倒排索引
二、概念
1、说明
2、mysql和es的对比
三、mapping属性
1、界说
四、CRUD
1、查看es中有哪些索引库
2、创建索引库
3、修改索引库
4、删除索引库
5、新增文档
6、删除文档
5、条件查询


一、认识elaticsearch

elasticsearch基于倒排索引结构
1、什么是正向索引

正向索引就像mysql数据库,如果根据非索引字段查询数据,会逐行获取表中所有数据,然后判断是否满意规则
比方:设置数据库中有title字段,为非索引字段流程如下:
1)用户搜刮数据,条件是title符合`"%手机%"`
2)逐行获取数据,比如id为1的数据
3)判断数据中的title是否符合用户搜刮条件
4)如果符合则放入结果集,不符合则丢弃。回到步骤1
2、什么是倒排索引



  • 文档:就是用来搜刮的数据,等同于mysql数据库中的一条纪录
  • 词条:利用分词器分出来的词条,比方数据中title为:我是中国人,分词器就可以分为:我 、是、 中国人、 中国、 国人等几个词条出来
* 将每一个文档的数据利用算法分词,得到一个个词条
* 创建表,每行数据包罗词条、词条所在文档id、位置等信息
* 因为词条唯一性,可以给词条创建索引,比方hash表结构索引


流程:
1)用户输入条件`"华为手机"`举行搜刮。
2)对用户输入内容**分词**,得到词条:`华为`、`手机`。
3)拿着词条在倒排索引中查找,可以得到包罗词条的文档id:1、2、3。
4)拿着文档id到正向索引中查找具体文档。



  • 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包罗所需要的词条,是**根据文档找词条的过程。
  • 而倒排索引**则相反,是先找到用户要搜刮的词条,根据词条得到掩护词条的文档的id,然后根据id获取文档。是**根据词条找文档的过程。
二、概念

1、说明

elasticsearch是面向document存储的,一个doc就是数据库的一条纪录,该条纪录会被序列化成json的格式存入文档中,文档中包罗很多的字段(filed)等同于数据库中的列

2、mysql和es的对比



三、mapping属性

1、界说

mapping是对文档中field的约束,比方对字段范例的约束。就像数据库中的表结构


  • * type:字段数据范例,常见的简单范例有:

    •   * 字符串:text(可分词的文本)、keyword(准确值,比方:品牌、国家、ip地点)
    •   * 数值:long、integer、short、byte、double、float、
    •   * 布尔:boolean
    •   * 日期:date
    •   * 对象:object

  • * index:是否创建索引,默认为true
  • * analyzer:使用哪种分词器
  • * properties:该字段的子字段
比方下面的json文档:
   {  
    "age": 21,  
    "weight": 52.1,  
    "isMarried": false,  
    "info": "这是一个步伐员",  
    "email": "nuanqin@163.com",  
    "score": [99.1, 99.5, 98.9],  
    "name": {  
        "firstName": "思",  
        "lastName": "陈"  
    }  
}  
对应的每个字段映射(mapping):


  • * age:范例为 integer;参与搜刮,因此需要index为true;无需分词器
  • * weight:范例为float;参与搜刮,因此需要index为true;无需分词器
  • * isMarried:范例为boolean;参与搜刮,因此需要index为true;无需分词器
  • * info:范例为字符串,需要分词,因此是text;参与搜刮,因此需要index为true;分词器可以用ik_smart
  • * email:范例为字符串,但是不需要分词,因此是keyword;不参与搜刮,因此需要index为false;无需分词器
  • * score:虽然是数组,但是我们只看元素的范例,范例为float;参与搜刮,因此需要index为true;无需分词器
  • * name:范例为object,需要界说多个子属性
  •   * name.firstName;范例为字符串,但是不需要分词,因此是keyword;参与搜刮,因此需要index为true;无需分词器
  •   * name.lastName;范例为字符串,但是不需要分词,因此是keyword;参与搜刮,因此需要index为true;无需分词器
四、CRUD

可接纳es的可视化工具kibana举行执行CRUD语句,
入口:kibana的Dev Tools
1、查看es中有哪些索引库

  1. GET /_cat/indices?v
复制代码
2、创建索引库

  1. PUT /索引库名称
  2. {
  3.   "mappings": {
  4.     "properties": {
  5.       "字段名":{
  6.         "type": "text",
  7.         "analyzer": "ik_smart"
  8.       },
  9.       "字段名2":{
  10.         "type": "keyword",
  11.         "index": "false"
  12.       },
  13.       "字段名3":{
  14.         "properties": {
  15.           "子字段": {
  16.             "type": "keyword"
  17.           }
  18.         }
  19.       },
  20.       // ...略
  21.     }
  22.   }
  23. }
复制代码
3、修改索引库

倒排索引结构虽然不复杂,但是一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引,这简直是灾难。因此索引库**一旦创建,无法修改mapping**。
虽然无法修改mapping中已有的字段,但是却允许添加新的字段到mapping中,因为不会对倒排索引产生影响。
  1. PUT /索引库名/_mapping
  2. {
  3.   "properties": {
  4.     "新字段名":{
  5.       "type": "integer"
  6.     }
  7.   }
  8. }
复制代码
4、删除索引库

       DELETE /索引库名
  5、新增文档

新增文档雷同于数据库的新增一条纪录
  1. POST /索引库名/_doc/文档id
  2. {
  3.     "字段1": "值1",
  4.     "字段2": "值2",
  5.     "字段3": {
  6.         "子属性1": "值3",
  7.         "子属性2": "值4"
  8.     },
  9.     // ...
  10. }
  11. #例如:
  12. POST /heima/_doc/1
  13. {
  14.     "info": "我是一个程序员",
  15.     "email": "nuanqin@163.com",
  16.     "name": {
  17.         "firstName": "思",
  18.         "lastName": "陈"
  19.     }
  20. }
复制代码
6、删除文档

   DELETE /{索引库名}/_doc/id值
  5、条件查询

基本语法:


  • * 哀求方式:PUT
  • * 哀求路径:/索引库名,可以自界说,若不带索引库名代表查询所有库
  • * 哀求参数:mapping映射
  • *_search代表搜刮
  1. #带索引库名 -->
  2. GET /index_name/_search
  3. {
  4.   "query": {
  5.     "match_all": {}
  6.   }
  7. }
  8. #不带索引库名
  9. GET /_search
  10. {
  11.   "query": {
  12.     "match_all": {}
  13.   }
  14. }
  15. #用于搜索字段中包含特定文本的文档:
  16. GET /index_name/_search
  17. {
  18.   "query": {
  19.     "match": {
  20.       "message": "error"
  21.     }
  22.   }
  23. }
  24. #精确匹配字段值
  25. GET /index_name/_search
  26. {
  27.   "query": {
  28.     "term": {
  29.       "status": "200"
  30.     }
  31.   }
  32. }
  33. #组合查询多个条件
  34. GET /index_name/_search
  35. {
  36.   "query": {
  37.     "bool": {
  38.       "must": [
  39.         { "match": { "message": "error" } },
  40.         { "term": { "status": "200" } }
  41.       ]
  42.     }
  43.   }
  44. }
  45. #过滤特定范围内的数据
  46. GET /my-index/_search
  47. {
  48.   "query": {
  49.     "range": {
  50.       "field_name": {
  51.         "gte": "2024-01-01",
  52.         "lte": "2024-01-31"
  53.       }
  54.     }
  55.   }
  56. }
  57. #分页查询
  58. GET /my-index/_search
  59. {
  60.   "query": {
  61.     "match_all": {}
  62.   },
  63.   "from": 0,
  64.   "size": 10
  65. }
  66. #排序查询
  67. GET /my-index/_search
  68. {
  69.   "query": {
  70.     "match_all": {}
  71.   },
  72.   "sort": [
  73.     { "field_name": { "order": "asc" } }
  74.   ]
  75. }
  76. #完整示例
  77. GET /my-index/_search
  78. {
  79.   "query": {
  80.     "bool": {
  81.       "must": [
  82.         { "match": { "title": "Elasticsearch" } }
  83.       ],
  84.       "filter": [
  85.         { "range": { "timestamp": { "gte": "2024-01-01", "lte": "2024-01-31" } } }
  86.       ],
  87.       "must_not": [
  88.         { "term": { "status": "deleted" } }
  89.       ]
  90.     }
  91.   },
  92.   "aggs": {
  93.     "status_count": {
  94.       "terms": {
  95.         "field": "status",
  96.         "size": 10
  97.       }
  98.     }
  99.   },
  100.   "sort": [
  101.     { "timestamp": { "order": "desc" } }
  102.   ],
  103.   "from": 0,
  104.   "size": 10
  105. }
复制代码
五、响应结果解析

1、took



  • 含义:表示 Elasticsearch 执行查询所花费的时间,单元为毫秒。
  • 示例:"took": 4 表示查询耗时 4 毫秒。
2、timed_out



  • 含义:表示查询是否超时。如果查询在指定时间内完成,则为 false;如果超时,则为 true。
  • 示例:"timed_out": false 表示查询没有超时。
3、_shards



  • 含义:包罗分片的统计信息,说明查询涉及的分片总数、成功分片数、跳过分片数和失败分片数。
  • 字段解析

    • total:查询涉及的分片总数。
    • successful:成功处置惩罚的分片数。
    • skipped:跳过的分片数。
    • failed:失败的分片数。

   "_shards": {
          "total": 1,
          "successful": 1,
          "skipped": 0,
          "failed": 0
}
  4、hits



  • 含义:包罗查询结果的核心部分,包罗匹配的文档列表和统计信息。
  • 字段解析

    • total

      • value:表示匹配查询条件的文档总数。
      • relation:表示 value 的准确性,eq 表示准确值,gte 表示大于或即是。

    • max_score:表示最相干文档的相干性得分(_score),如果没有使用相干性评分(如 match_all 查询),则为 null。
    • hits:包罗匹配的文档列表,每个文档是一个 JSON 对象,包罗以下字段:

      • _index:文档所在的索引名称。
      • _type:文档的范例(在 7.x 以后默认为 _doc)。
      • _id:文档的唯一标识符。
      • _score:文档的相干性得分,表示文档与查询条件的匹配程度。
      • _source:文档的原始内容,包罗所有字段的值。
      • sort:如果使用了排序,表示文档的排序值。


5、aggragations



  • 含义:如果查询中包罗聚合操作(aggs),则此字段包罗聚合结果。
  • 示例
   "aggregations": {
          "ageAgg": {
                    "doc_count_error_upper_bound": 0,
                    "sum_other_doc_count": 0,
                    "buckets": [{
                                        "key": 38,
                                        "doc_count": 2
                                      },
                                      {
                                        "key": 28,
                                        "doc_count": 1
                                      } ]
                          },
          "ageAvg": {
            "value": 34.0
          }


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表