kibana es 语法记录 elaticsearch

目录

一、认识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中有哪些索引库

GET /_cat/indices?v

2、创建索引库

PUT /索引库名称
{"mappings": {"properties": {"字段名":{"type": "text","analyzer": "ik_smart"},"字段名2":{"type": "keyword","index": "false"},"字段名3":{"properties": {"子字段": {"type": "keyword"}}},// ...略}}
}

3、修改索引库

倒排索引结构虽然不复杂,但是一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引,这简直是灾难。因此索引库**一旦创建,无法修改mapping**。

虽然无法修改mapping中已有的字段,但是却允许添加新的字段到mapping中,因为不会对倒排索引产生影响。

PUT /索引库名/_mapping
{"properties": {"新字段名":{"type": "integer"}}
}

4、删除索引库

    DELETE /索引库名

5、新增文档

新增文档类似于数据库的新增一条记录

POST /索引库名/_doc/文档id
{"字段1": "值1","字段2": "值2","字段3": {"子属性1": "值3","子属性2": "值4"},// ...
}#例如:
POST /heima/_doc/1
{"info": "我是一个程序员","email": "nuanqin@163.com","name": {"firstName": "思","lastName": "陈"}
}

6、删除文档

DELETE /{索引库名}/_doc/id值

5、条件查询

基本语法:

  • * 请求方式:PUT
  • * 请求路径:/索引库名,可以自定义,若不带索引库名代表查询所有库
  • * 请求参数:mapping映射
  • *_search代表搜索
#带索引库名 -->
GET /index_name/_search
{"query": {"match_all": {}}
}#不带索引库名
GET /_search
{"query": {"match_all": {}}
}#用于搜索字段中包含特定文本的文档:
GET /index_name/_search
{"query": {"match": {"message": "error"}}
}#精确匹配字段值
GET /index_name/_search
{"query": {"term": {"status": "200"}}
}#组合查询多个条件
GET /index_name/_search
{"query": {"bool": {"must": [{ "match": { "message": "error" } },{ "term": { "status": "200" } }]}}
}#过滤特定范围内的数据
GET /my-index/_search
{"query": {"range": {"field_name": {"gte": "2024-01-01","lte": "2024-01-31"}}}
}#分页查询
GET /my-index/_search
{"query": {"match_all": {}},"from": 0,"size": 10
}#排序查询
GET /my-index/_search
{"query": {"match_all": {}},"sort": [{ "field_name": { "order": "asc" } }]
}#完整示例
GET /my-index/_search
{"query": {"bool": {"must": [{ "match": { "title": "Elasticsearch" } }],"filter": [{ "range": { "timestamp": { "gte": "2024-01-01", "lte": "2024-01-31" } } }],"must_not": [{ "term": { "status": "deleted" } }]}},"aggs": {"status_count": {"terms": {"field": "status","size": 10}}},"sort": [{ "timestamp": { "order": "desc" } }],"from": 0,"size": 10
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18761.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从技术债务到架构升级,滴滴国际化外卖的变革

背 景 商家营销简述 在外卖平台的运营中,我们致力于通过灵活的补贴策略激励商家,与商家共同打造良好的合作关系,也会提供多样化的营销活动,帮助商家吸引更多用户下单。通过这些活动,不仅能够提高商家的销量&#xff0c…

【Redis系列】Redis安装与使用

???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

Spring Boot中如何自定义Starter

文章目录 Spring Boot中如何自定义Starter概念和作用1. 概念介绍2. 作用和优势2.1 简化依赖管理2.2 提供开箱即用的自动配置2.3 标准化和模块化开发2.4 提高开发效率2.5 提供灵活的配置覆盖3. 应用场景创建核心依赖1. 确定核心依赖的作用2. 创建 starter-core 模块2.1 依赖管理…

【触想智能】工业显示器和普通显示器的区别以及工业显示器的主要应用领域分析

在现代工业中,工业显示器被广泛应用于各种场景,从监控系统到生产控制,它们在实时数据显示、操作界面和信息传递方面发挥着重要作用。与普通显示器相比,工业显示器在耐用性、可靠性和适应特殊环境的能力上有着显著的差异。 触想工业…

Deepseek R1模型本地化部署+API接口调用详细教程:释放AI生产力

文章目录 前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装ollama2部署DeepSeek R1模型删除已存在模型,以7b模型为例 三、DeepSeek API接口调用Cline配置 前言 随着最近人工智能 DeepSeek 的爆火,越来越多的技术大佬们开始关注如…

ML.Net二元分类

ML.Net二元分类 文章目录 ML.Net二元分类前言项目的创建机器学习模型的创建添加模型选择方案训练环境的选择训练数据的添加训练数据的选择训练数据的格式要预测列的选择模型评估模型的使用总结前言 ‌ML.NET‌是由Microsoft为.NET开发者平台创建的免费、开源、跨平台的机器学习…

Seaweedfs(master volume filer) docker run参数帮助文档

文章目录 进入容器后执行获取weed -h英文中文 weed server -h英文中文 weed volume -h英文中文 关键点测试了一下,这个-volume.minFreeSpace string有点狠,比如设置值为10(10%),它直接给系统只留下10%的空间&#xff0…

【系统架构设计师】虚拟机体系结构风格

目录 1. 说明2. 解释器体系结构风格3. 规则系统体系结构风格4. 例题4.1 例题1 1. 说明 1.p263。2.虚拟机体系结构风格的基本思想是人为构建一个运行环境,在这个环境之上,可以解析与运行自定义的一些语言,这样来增加架构的灵活性。3.虚拟机体…

ROS学习

1.ROS工作空间 存放项目开发相关文件的文件夹; src:代码空间(Source Space)install:安装空间(Install Space)build:编译空间(Build Space)log:日志空间(Log Space) 2.c…

【vue3】实现pdf在线预览的几种方式

今天一天对当前可用的pdf预览插件做了测试,主要需求是只能预览不能下载,但对于前端来说,没有绝对的禁止,这里只罗列实现方式。 目前采用vue3版本为:3.2.37 iframevue-officepdfjs-dist iframe 先说最简单的&#xf…

Springboot中使用Elasticsearch(部署+使用+讲解 最完整)

目录 引言 一、docker中安装Elasticsearch 1、创建es专有的网络 2、开放端口 3、在es-net网络上安装es和kibana 4、可能出现的问题 5、测试 6、安装IK分词器 7、测试IK分词器 二、结合业务实战 1、准备依赖 2、配置yml 3、读取yml配置 4、准备es配置类 5、编写测…

文件夹上传到github分支最后github上面还是没有文件和文件夹

环境: github 问题描述: 文件夹上传到github分支最后github上面还是没有文件和文件夹, 和这样一样 解决方案: 从 git ls-tree -r HEAD 的输出中可以看到,metahuman-stream 文件夹显示为如下内容: 160000 commi…

基于Go语言 XTA AI聊天界面实现

项目开源地址: XTA-AI-SDK 人工智能技术的迅速发展,AI聊天应用变得越来越流行。本文将介绍如何使用Go语言和LCL库( Lazarus Component Library)创建一个功能丰富的AI聊天界面。项目主要包含以下模块: 项目背景 本项目旨在为开发…

C++入门小清单

在上一篇文章中我向大家介绍了关于C的命名空间的用处以及一些,这篇内容主要是讲解有关C入门的一些小知识,大家可以通过此文章初步进行一个了解,这些东西在之后的C学习中都会有更多的妙用,如果有小伙伴感兴趣C的命名空间&#xff0…

【kafka系列】日志存储设计 消息写入、读取

目录 日志存储设计 1. 日志存储的目录结构 2. 日志内容格式设计 3. 日志索引设计 4. 设计优势 消息写入流程 示例 流程图 消息读取流程 示例 关键设计细节 流程图 日志存储设计 Kafka的日志存储是其高吞吐、持久化能力的核心设计,其结构包含目录组织、…

复杂电磁环境下无人机自主导航增强技术研究报告——地磁匹配与多源数据融合方法,附matlab代码

本文给出介绍和matlab程序,来实现地磁辅助惯性导航仿真验证,包含地磁基准图构建、飞行轨迹生成、INS误差建模、地磁匹配定位及多源数据融合等模块。通过对比分析验证地磁匹配修正惯性导航累积误差的有效性,可视化显示卫星拒止环境下的航迹修正…

springboot项目读取 resources 目录下的文件的9种方式

1. 使用 ClassLoader.getResourceAsStream() 方法 InputStream inputStream getClass().getClassLoader().getResourceAsStream(“file.txt”); 2.使用 Class.getResourceAsStream() 方法 InputStream inputStream getClass().getResourceAsStream(“/file.txt”); 3.使用 Re…

基于SSM+uniapp的鲜花销售小程序+LW示例参考

1.项目介绍 系统角色:管理员、商户功能模块:用户管理、商户管理、鲜花分类管理、鲜花管理、订单管理、收藏管理、购物车、充值、下单等技术选型:SSM,Vue(后端管理web),uniapp等测试环境&#x…

硕成C语言22【一些算法和数组的概念】

1.求水仙花数 #include <stdio.h>int main() {//求水仙花数&#xff1a;1.三位数 2.个位的立方十位的立方百位的立方该数int unit, tens, hundreds;for (int i 100; i < 1000; i)//i表示该水仙花数{unit i / 1 % 10;tens i / 10 % 10;hundreds i / 100 % 10;if (…

游戏引擎学习第101天

回顾当前情况 昨天的进度基本上完成了所有内容&#xff0c;但我们还没有进行调试。虽然我们在运行时做的事情大致上是对的&#xff0c;但还是存在一些可能或者确定的bug。正如昨天最后提到的&#xff0c;既然现在时间晚了&#xff0c;就不太适合开始调试&#xff0c;所以今天我…