ElasticSearch 用法

首先讲下 ES的倒排序索引

     创建倒排索引是对正向索引的一种特殊处理,

  • 将每一个文档的数据利用算法分词,得到一个个词条

  • 创建表,每行数据包括词条、词条所在文档id、位置等信息

  • 因为词条唯一性,可以给词条创建索引,例如hash表结构索引

     倒排索引的搜索流程

    倒排索引的搜索流程如下(以搜索"华为手机"为例):

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

正向索引和倒排索引
正向索引:

优点:

可以给多个字段创建索引

根据索引字段搜索、排序速度非常快

缺点:

根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描

倒排索引:

优点:

根据词条搜索、模糊搜索时,速度非常快

缺点:

只能给词条创建索引,而不是字段

无法根据字段做排序

如何在ES上创建索引

首先打开kibanba

进入到控制台然后开始创建索引

之前说过es中索引对应的是mysql的数据库,所以我们应该先创建索引

创建索引语法:put shooping 

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "shopping"
}
会返回这几个字段,分别代表

acknowledged:代表是创建索引创建成功

shards_acjnowledged: 代表所有分片创建成功

index:代表索引的名字

然后再次put的,会出现这种情况 put是具有幂等性的

{
  "error" : {
    "root_cause" : [
      {
        "type" : "resource_already_exists_exception",
        "reason" : "index [shopping/32XXUAigSX-96lF9wV49Aw] already exists",
        "index_uuid" : "32XXUAigSX-96lF9wV49Aw",
        "index" : "shopping"
      }
    ],
    "type" : "resource_already_exists_exception",
    "reason" : "index [shopping/32XXUAigSX-96lF9wV49Aw] already exists",
    "index_uuid" : "32XXUAigSX-96lF9wV49Aw",
    "index" : "shopping"
  },
  "status" : 400
}
error:表示错误

root_cause:表示错误的列表

type:表示错误类型

reason:错误的原因

index_uuid:唯一标识

index:索引名字

如果想用post请求会发送什么,post是不具有幂等性的

Incorrect HTTP method for uri [/shopping?pretty=true] and method [POST], allowed: [HEAD, PUT, GET, DELETE]",

方法不能使用post,直接报错

查询索引语法:get shopping

{
  "shopping" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "creation_date" : "1710766914710",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "32XXUAigSX-96lF9wV49Aw",
        "version" : {
          "created" : "7080099"
        },
        "provided_name" : "shopping"
      }
    }
  }
}

shopping:索引名字

aliases:索引别名

mappings:意识就是文档结构和字段类型

settings:设置索引的信息

index:索引级的设置

creation_date:创建时间

number_of_shards:索引分片的数量

number_of_replicas:每个分片的副本数量

uuid:uuid

version:版本号

provided_name:提供的索引名字

查询全部索引语法:get _cat/indices?v

表头    含义
health    当前服务器健康状态: green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)
status    索引打开、关闭状态
index    索引名
uuid    索引统一编号
pri    主分片数量
rep    副本数量
docs.count    可用文档数量
docs.deleted    文档删除状态(逻辑删除)
store.size    主分片和副分片整体占空间大小
pri.store.size    主分片占空间大小

删除索引语法:delete shopping

{
  "acknowledged" : true
}
acknowledged:是否成功

创建es数据语法:post /shopping/_doc

{
  "error" : {
    "root_cause" : [
      {
        "type" : "parse_exception",
        "reason" : "request body is required"
      }
    ],
    "type" : "parse_exception",
    "reason" : "request body is required"
  },
  "status" : 400
}
文档对应的是数据库中数据

这个原因就是没有body数据,并且我们传递数据是json

试着这种修改一下

{
  "_index" : "shopping", 
  "_type" : "_doc",
  "_id" : "iQPEUY4Bonlp-IezIGqE",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

index:索引

type:文档

id:唯一标识

result:结果

shards:分配

total:分片总数

successful:成功数量

failed:失败数量

seq_no:文档序列号,序列号越大标识越新

_primary_term:文档所属的主要分片的任期号

当在发送一模一样的请求

id一直在变化,如果我们想查询某个数据,id太麻烦了,如果想自定义呢

创建es数据指定id语法:post /shopping/_doc/1001

如果我们指定了id,这时候就可以用put,因为他是幂等性

主键查询和全局查询语法

主键查询:get /shopping/_doc/1001

{
  "_index" : "shopping",             //索引
  "_type" : "_doc",                     //类型
  "_id" : "1001",                        //id
  "_version" : 2,                       //版本号
  "_seq_no" : 5,                       //序列号
  "_primary_term" : 1,
  "found" : true,                      //成功
  "_source" : {                        //信息
    "name" : "huyin",
    "age" : "21",
    "sex" : "男"
  }
}

查询没有的数据

{
  "_index" : "shopping", 
  "_type" : "_doc",             
  "_id" : "1002",
  "found" : false
}

查询全部数据语法:get /shopping/_search

{
  "took" : 0,                          //      耗时 
  "timed_out" : false,            //    超时
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 5,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [                           //命中
      {
        "_index" : "shopping",
        "_type" : "_doc",
        "_id" : "iQPEUY4Bonlp-IezIGqE",
        "_score" : 1.0,
        "_source" : {
          "name" : "huyin",
          "age" : "21",
          "sex" : "男"
        }
      },
      {
        "_index" : "shopping",
        "_type" : "_doc",
        "_id" : "AQPJUY4Bonlp-IezE2v3",
        "_score" : 1.0,
        "_source" : {
          "name" : "huyin",
          "age" : "21",
          "sex" : "男"
        },
    ]
  }
}

全局修改和局部修改语法

全局修改:put /shopping/_doc/1001

put具有幂等性所以可以用

{
  "_index" : "shopping",
  "_type" : "_doc",
  "_id" : "1001",
  "_version" : 3,             // 版本号是一直变化的
  "result" : "updated",    结果:updated 修改
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 6,
  "_primary_term" : 1
}

局部修改:post /shopping/_update/1001

get请求一个:get /shopping/_doc/1001

条件查询语法:get /shopping/_search 传入body

{"query":{              query 查询的意思
  "match": {            match 匹配的意思
    "name": "huyin"  name  查询那个字段  huyin 查询那个值
  }
}}

 

全文查询的语法:get /shopping/_search

{"query":{  query 查询的意思
  "match_all": {}  match_all 全部查询
}}

 

分页查询的语法:get /shopping/_search

{"query":{
  "match_all": {}
},
  "from":0,    from当前页的起始位置
  "size":2  每页条数
}

筛选出固定的字段:get /shopping/_search

{"query":{
  "match_all": {}
},
  "from":0,
  "size":2,
  "_source":[    source :数组里面是可以筛选出固定的字段
    "name"
  ]
}

对数据进行排序:post /shoppingtest/_search

{"query":{
  "match_all": {}
},
  "from":0,
  "size":2,
  "sort":{         sort 排序  ------字段--------order(排序)-----desc(倒序)/asc(正序)
    "age":{
      "order":"desc"     
    }
  }
}

多条件查询的语法:get /shoppingtest/_search


{"query":{     query 查询
  "bool":{       bool  条件
    "must":[    must 必须
      {"match": {"name": "huyin"},   match 匹配

       {"match": {"age": 20}   
      }
      ]
  }
}
}

 

如果想要只满足一个的意思匹配数据:get /shoppingtest/_search

{"query":{
  "bool":{
    "should":[    should:应该的意思
      {"match": {"name": "huyin"}
      },
      {"match": {"name": "nihao"}
      }
      ]
  }
}
}

如果想要范围匹配的语法:get /shoppingtest/_search

{"query":{
  "bool":{
    "should":[
      {"match": {"name": "huyin"}
      },
      {"match": {"name": "nihao"}
      }
      ],
      "filter": [             filter 过滤
        {"range": {        range:范围
          "age": {           age:字段
            "lt": 25,           lt:小于
            "gte": 20         gte:大于等于
          }
        }
        }
      ]
  }
}

}

全文检索和完全匹配和高亮查询的操作

全文检索:

Es底层会对文本数据保存时进行拆解操作,然后保存到倒排索引,这种检索方式称为全文检索

完全匹配:match_phrase

高亮匹配:

 "highlight":{          高亮
    "fields": {           字段属性
      "name":{}         字段
    }
  }

聚合函数的语法:

分组操作

{
  "aggs":{                     聚合操作
    "age_group":{         别名
      "terms": {               分组
        "field": "age"        字段
      }
    }
  }
}

计算平均值

{
  "aggs":{
    "age_avg":{
      "avg": {                avg 平均值
        "field": "age"
      }
    }
  },
  "size":0
}

映射关系:

首先创建一个索引:put /user

创建一个映射关系:put /user/_mapping

{"properties":{          属性
  "name":{
    "type":"text",        type:类型    text:文本
    "index":"true"
  },
  "age":{
    "type":"keyword",  type:类型   keyword:代表不能被分词
    "index":"true"
  },
  "tel":{
    "type":"keyword",
    "index":"false"    index:不能被索引
  }
}}

获取索引信息:get /user

创建数据:post /user/_doc

查询数据: name

查询数据: age  因为映射的type是keyword不支持分词

查询数据:tel   index是false 不支持索引查询

es的kibanba的语法结束,其实还有很多

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

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

相关文章

旅游小程序开发的费用及功能

随着科技的发展和智能手机的普及,越来越多的行业开始利用小程序来进行线上服务。旅游业作为一个重要的服务业,也纷纷推出了自己的旅游小程序,以方便游客在线预订、查询景点信息等。那么,旅游小程序开发的费用是多少?功…

Google研究者们提出了VLOGGER模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【探索Linux】—— 强大的命令行工具 P.29(网络编程套接字 —— 简单的TCP网络程序模拟实现)

阅读导航 引言一、TCP协议二、TCP网络程序模拟实现1. 预备代码⭕ThreadPool.hpp(线程池)⭕makefile文件⭕打印日志文件⭕将当前进程转变为守护进程 2. TCP 服务器端实现(TcpServer.hpp)3. TCP 客户端实现(main函数&…

babyos 学习记录

宏定义头文件 将一个宏定义取不同的数据到不同的数组中; 侵入式链表 struct list_head { struct list_head *next, *prev; }; // 添加(list_add_tail/list_add)、删除、查找 xx.h // 定义一个用于链表管理的结构体 typedef sturct{ xxx …

matlab矩形薄板小挠度弯曲有限元编程 |【Matlab源码+理论文本】|板单元| Kirchoff薄板 | 板壳单元

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

分库分表场景下多维查询解决方案(用户+商户)

在采用分库分表设计时,通过一个PartitionKey根据散列策略将数据分散到不同的库表中,从而有效降低海量数据下C端访问数据库的压力。这种方式可以缓解单一数据库的压力,提升了吞吐量,但同时也带来了新的问题。对于B端商户而言&#…

Layui实现删除及修改后停留在当前页

1、功能概述? 我们在使用layui框架的table显示数据的时候,会经常的使用分页技术,这个我们期望能够期望修改数据能停留在当前页,或者删除数据的时候也能够停留在当前页,这样的用户体验会更好一些,但往往事与…

硬核分享|如何将文字转成语音对视频进行配音或旁白解说

硬核分享|如何将文字转成语音对视频进行配音或旁白解说_哔哩哔哩_bilibili 文字转语音工具成为了一种便利而实用的技术应用,它能够将文字内容转化为声音,为我们提供全新的听觉体验。 不论是在阅读、学习、娱乐还是无障碍辅助等方面,文字转语…

【QT入门】 Qt槽函数五种常用写法介绍

声明:该专栏为本人学习Qt知识点时候的笔记汇总,希望能给初学的朋友们一点帮助(加油!) 往期回顾: 【QT入门】实现一个简单的图片查看软件-CSDN博客 【QT入门】图片查看软件(优化)-CSDN博客 【QT入门】 lambda表达式(函数)详解-CSDN…

苹果手机更换国内IP地址的方法

在网络世界中,IP地址扮演着极为重要的角色,是互联网通信的基础。很多人在使用苹果手机时,有时候需要更换国内IP地址以获取更多网络资源或保护隐私。那么,是否可以更换国内ip地址?苹果手机更换国内ip地址的方法是怎样的…

Redis学习二--常见问题及处理

基本概念 Redis基本概念数据结构 机制 持久化机制: RDB(内存快照):某一时刻的内存快照以二进制的方式写入磁盘,可以手动触发和自动触发。 优点:生成文件小,恢复速度快,适用于灾难恢复。 缺点&#xff1a…

Linux docker4--本地jar包生成镜像和docker部署运行

一、通过springboot创建一个java项目,打成出jar包。 二、将jar包生成docker镜像 (1)、创建Dockerfile文件 创建Dockerfile文件,将如下的代码内容粘贴进去即可。 注意:本例中我打出的jar包是boot.jar。如果你打出的jar…

百度小程序入口在哪里找到怎么打开百度词令关键词口令直达小程序?

百度小程序入口在哪里找到怎么打开百度词令关键词口令直达小程序? 一、百度搜索找到百度词令小程序 打开手机百度搜索「词令」即可找到百度词令关键词口令直达小程序; 二、百度小程序中心找到百度小程序 2.1、打开手机百度,点击底部我的&a…

SQLiteC/C++接口详细介绍sqlite3_stmt类(十三)

返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(十二) 下一篇: 待续 51、sqlite3_stmt_scanstatus_reset sqlite3_stmt_scanstatus_reset 函数用于重置指定语句对象最近一次执行的 WHER…

kotlin中使用ViewBinding绑定控件

kotlin中使用ViewBinding绑定控件 什么是ViewBinding? View Binding是Android Studio 3.6推出的新特性,主要用于减少findViewById的冗余代码,但内部实现还是通过使用findViewById。通过ViewBinding,可以更轻松地编写可与视图交互…

String类适合做HashMap的key的原因是什么

在《Java 编程思想》中有这么一句话:设计 hashCode() 时最重要的因素就是对同一个对象调用 hashCode() 都应该产生相同的值。 String 类型的对象对这个条件有着很好的支持,因为 String 对象的 hashCode() 值是根据 String 对象的 内容计算的&#xff…

unity学习(66)——控制器Joystick Pack优化

Joystick Pack这种重力带惯性不利于正常开发。决定进行优化。有一种万事俱备只欠东风的感觉。 源代码如下: 1.在脚本中找到轮盘所输出的方向值 2.把方向的改变值加到鸣人模型身上。 2.1控制器脚本中添加model变量 2.2在unity中赋值 2.3代码中修改位置 using Syst…

Python:使用 jionlp和cpca 实现国内地址文本解析

目录 使用 jionlp解析国内地址文本使用 cpca 实现解析国内地址文本总结 使用 jionlp解析国内地址文本 jionlp: 中文 NLP 预处理、解析工具包,准确、高效、易用 github: https://github.com/dongrixinyu/JioNLP文档:http://www.jionlp.com/ 使用示例 …

vue2源码学习01配置rollup打包环境

1.下载rollup相关依赖 npm i rollup rollup-plugin-babel babel/core babel/preset-env --save-dev 2.新建rollup.config.js配置打包选项 //rollup可以导出一个对象,作为打包的配置文件 import babel from rollup-plugin-babel export default {input: ./src/ind…

搭建Hadoop集群(完全分布式运行模式)

目录 一、准备模板机(最小化安装)二、配置一台纯净的模板机修改主机名固定IP地址通过yum安装方式安装必要的软件关闭防火墙且禁止自启修改hosts映射文件创建普通用户 并让他能用sudo命令在/opt下创建software和module完成 三、搭建完全分布式运行模式3.1克隆第一台机器hadoop10…