Kibana操作Elasticsearch-检索

2023-11-02

1.导入ES官方检索测试数据
本次使用kibana操作ES以这些数据为基础
ES在GitHub的地址
在这里插入图片描述
这段数据存在这个目录下
在这里插入图片描述
将这2000行json复制出来

2.使用Kibana将2000行数据导入到ES中

POST /bank/account/_bulk

在这里插入图片描述
3.根据ES官方文档对数据检索
ES官网
在这里插入图片描述
进入文档–>选择其他版本
在这里插入图片描述
进入对应版本
在这里插入图片描述
进入这个页面有点慢
在这里插入图片描述
脚本文件还没加载完,加载完了的界面是这样的
在这里插入图片描述
点击+好展开
在这里插入图片描述
进入检索文档
在这里插入图片描述
这里我的步骤做的这么详细是不是因为CSDN资源服不要我付费,而是防止这些链接改变,而找不到界面

4.开始检索

ES支持两种基本方式检索
1.通过使用REST request URL 发送搜索参数(url+检索参数)
2.使用REST request body来发送他们(url+请求体)

1.使用REST request URL检索

GET bank/_search?q=*&sort=account_number:asc
#查询bank这个索引下的数据,q=*查询所有,sort=account_number:asc 按照account_number进行asc升序排列

检索结果
在这里插入图片描述
这些检索结果前面的key代表什么意思官网上也有描述
在这里插入图片描述
至于写的什么自己翻译
在这里插入图片描述

在这里插入图片描述
这里检索到1000条数据,但是只给我们返回10条,这是因为ES默认值返回10条数据,做了分页处理

2.使用REST request body来发送他们(url+请求体)–Query DSL
官方推荐使用Query DSL模式检索数据

GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" },
    { "balance": "desc" }
  ]
}

#query查询查询条件,match_all这个代表查询所有
#sort排序条件,account_number asc按照账号升序排列,这里演示两个字段排序,先根据account_number升序排列,然后根据balance降序排列

其他一些写法官网上面也有描述
分页查询
在这里插入图片描述

Query DSL

Elasticsearch提供了一个可以执行查询的Json风格的DSL (domain-specific language领域特定语言) 。这个被称为Query DSL.该查询语言非常全面,并且刚开始的时候感觉有点复杂,真正学好它的方法是从一些基础的示例开始的。

1.语法结构
一个典型的检索机构是这样的

GET /索引/类型/_search
{
  #这里是做什么的操作
  "query": { 
    #查询详细操作
  	"match_all": {} 
  },
  xxxxxx
  xxx
  xxx
}

在这里插入图片描述
下面就一个一个学咯

查询所有根据balance字段倒叙

GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "balance": "desc" }
  ]
}

查询所有并分页按照指定字段排序
在这里插入图片描述
这里取下一页和Mysql不一样哦,下一页from不是1,而是5,开始数据位置

GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "balance": "desc" }
  ],
  "from": 5,
  "size": 5
}

检索所有数据,返回部分字段

GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "balance": "desc" }
  ],
  "from": 5,
  "size": 5,
  "_source": ["gender","age","employer"]
}

在这里插入图片描述
全文检索 match
这里不区分大小写,只要address中包含mill数据的,那么都会被查询出来,类似于Mysql中的模糊查询,这也是ES的倒排索引机制

GET /bank/_search
{
  "query": { 
    "match": {
      "address": "mill"
    }
  }
}

GET /bank/_search
{
  "query": { 
    "match": {
      "address": "Mill"
    }
  }
}

这里全文检索出来的数据会按照匹配得分进行排序展示
在这里插入图片描述

当查询的数据条件为数据类型,而不是字符串那么就是精确查询

GET /bank/_search
{
  "query": { 
    "match": {
      "account_number": "20"
    }
  }
}

短语匹配 match_phrase
这里使用match_phrase这个将mill lane组成一个短语

GET /bank/_search
{
  "query": { 
    "match_phrase": { 
      "address": "mill lane" 
    } 
  }
}

在这里插入图片描述
对比match全文检索

GET /bank/_search
{
  "query": { 
    "match": {
      "address": "mill lane" 
    }
  }
}

在这里插入图片描述
这里使用match就会检索address字段中包含mill lane这两项的都能匹配上

多字段匹配 multi_match
这里使用multi_match,条件数据为mill Blackgum,参与匹配的字段为[“city”,“address”],会进行分词,匹配度度高的分数大

GET /bank/_search
{
  "query": { 
    "multi_match": {
      "query": "mill Blackgum", 
      "fields": ["city","address"]
    }
  }
}

在这里插入图片描述
第一条数据两个字段都命中上了,分数较高

复合查询

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { 
          "gender": "F"
          } 
        },
         { "match": { 
          "address": "Mill"
          } 
        }
      ]
    }
  }
}
#bool复合多个条件
#must是条件必须满足

在这里插入图片描述
必须满足gender=F和address=Mill

还有一种必须不满足
先试用必须满足查出几条数据
在这里插入图片描述
然后在使用must_not不满足age=38

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { 
          "gender": "M"
          } 
        },
         { "match": { 
          "address": "Mill"
          } 
        }
      ],
      "must_not": [
        {"match": {
          "age": "38"
        }}
      ]
    }
  }
}

在这里插入图片描述
should应该匹配

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { 
          "gender": "M"
          } 
        },
         { "match": { 
          "address": "Mill"
          } 
        }
      ],
      "must_not": [
        {"match": {
          "age": "18"
        }}
      ],
      "should": [
        {"match": {
          "lastname":"Wallace"
          }
        }
      ]
    }
  }
}
#bool复合多个条件
#must是条件必须满足
#must_not是条件必须不满足
#should是满足更好+分,不满足也能查,作为加分项

在这里插入图片描述
第一条结果和第二条结果gender、address都是一样的,且age不为18,后面的lastname只有第一条数据匹配到了,那么他的命中分数就高一些

结果过滤 filter
filter使用过滤检索不会影响档命中得分/单独使用没有文档命中得分
这个是有文档命中得分的

GET /bank/_search
{
  "query": {
    "bool": {
      "must":[
        {
          "range": {
            "age": {
              "gte": 18,
              "lte": 30
            }
          }
        }      
      ]
    }
  }
}

在这里插入图片描述
使用filter是没有的

GET /bank/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "age": {
            "gte": 18,
            "lte": 30
          }
        }
      }
    }
  }
}

在这里插入图片描述
复合检索+filter过滤
这是将复合检索出来的数据在进行filter过滤的
先不过滤检索数据

{
  "query": {
    "bool": {
      "must": [
        { "match": { 
          "gender": "M"
          } 
        },
         { "match": { 
          "address": "Mill"
          } 
        }
      ],
      "must_not": [
        {"match": {
          "age": "18"
        }}
      ],
      "should": [
        {"match": {
          "lastname":"Wallace"
          }
        }
      ]
    }
  }
}

在这里插入图片描述
加入filter

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { 
          "gender": "M"
          } 
        },
         { "match": { 
          "address": "Mill"
          } 
        }
      ],
      "must_not": [
        {"match": {
          "age": "18"
        }}
      ],
      "should": [
        {"match": {
          "lastname":"Wallace"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 18,
            "lte": 30
          }
        }
      }
    }
  }
}

在这里插入图片描述这里就可以对比没加filter的数据,这里filter确实没有影响文档命中得分

非文本字段使用term更加精确
默认情况下,Elasticsearch在分析时更改文本字段的值。这使得查找文本字段值的精确匹配变得困难。要搜索文本字段值,请使用匹配查询。

GET /bank/_search
{
  "query": {
   "term": {
     "address":"694 Jefferson Street"
   }
  }
}
#查询非字符串类型数据使用term
#文本类型的就用match检索

在这里插入图片描述如果使用term检索字符串

在这里插入图片描述
这里是匹配不到的

.keyword精确匹配

GET /bank/_search
{
  "query": {
   "match": {
     "address.keyword":"694 Jefferson Street"
   }
  }
}
#查询任何字段是都可以.keyword,这个的作用就是将这个694 Jefferson Street值精确匹配==,只有当694 Jefferson Street完全等于是才能匹配

在这里插入图片描述
这个.keyword和match_phrase有点像,其实有一个很大的区别
match_phrase是包数据即可含即可,而.keyword是必须等于
演示代码
使用.keyword

GET /bank/_search
{
  "query": {
   "match": {
     "address.keyword":"694 Jefferson"
   }
  }
}

在这里插入图片描述
无法匹配

使用match_phrase

GET /bank/_search
{
  "query": {
   "match_phrase": {
     "address":"694 Jefferson"
   }
  }
}

在这里插入图片描述
包含即可

本篇文章主要演示Elasticsearch的检索操作,下一篇将演示数据分析操作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kibana操作Elasticsearch-检索 的相关文章

  • 第5章 数组 第3题

    题目 编写一个程序 输入一个字符串 输出其中每个字符在字母表中的序号 对于不是英文字母的字符 输出0 例如 输入为 acbf8g 输出为1 3 2 6 0 7 代码 include
  • 基础练习—矩阵乘法

    题目描述 给定一个N阶矩阵A 输出A的M次幂 M是非负整数 例如 A 1 2 3 4 A的2次幂 7 10 15 22 输入 第一行是一个正整数N M 1 lt N lt 30 0 lt M lt 5 表示矩阵A的阶数和要求的幂数 接下来N
  • excel或txt格式坐标到面图层(python)

    背景 现有如下图所示的多个界址点坐标 excel格式或txt格式 需求 根据大量界址点坐标转换为界址点坐标对应的面shp图层 解决思路 一 为方便处理首先将txt文件或excel文件转换为csv文件 逗号分割符 二 为方便理解和使用 我们将

随机推荐

  • python numpy的学习

    0 引入numpy import numpy as np 1 将list变成np a 1 2 3 4 5 6 b np array a 将list变成array a shape 2 3 2行3列 a shape 0 2 获取行数 a sha
  • 攻防世界之WEB新手练习区(更新至11)

    攻防世界之WEB新手练习区 目录 001 view source 002 get post 003robots 004backup 005cookie 006disable button 007simple js 008xff refere
  • FTDI FT2232H在嵌入式教学中的应用

    FT2232H是FTDI chip在2012年发布的一款高速USB转串行通信的协议转换芯片 作为第五代USB协议转串行总线通信协议的芯片 完全符合USB2 0规范 480Mb s 并且可以依靠编程的方式配置成为串行或者并行的其他总线接口规范
  • Pycharm无法正常安装第三方库的时候,有以下几条应对方法

    1 首先检查自己的环境变量是否配置正确 点击setting 点击 Python Interpreter 点击Add Interpreter 配置完毕之后再试一次从这里下载 如果还不行的话可以换其他方法 2 从cmd或Pycharm Term
  • 什么是EL表达式

    EL表达式 expression language 即表达语言 它是为了便于存取数据而定义的一种语言 JSP2 0之后才成为一种标准 形式 以 开头 以 结尾 通过PAGE指令来说明是否支持EL表达式 具体举例 声明可以使用EL表达式 如果
  • 【腾讯云 TDSQL-C Serverless 产品测评】全面测评TDSQL-C Mysql Serverless

    全面测评TDSQL C Mysql Serverless 文章目录 全面测评TDSQL C Mysql Serverless 前言 什么是TDSQL C Mysql Serverless 初始化 TDSQL C Mysql Serverle
  • 前车之覆,后车之鉴——开源项目经验谈

    前车之覆 后车之鉴 开源项目经验谈 本文发表于 程序员 2005年第2期 随着开源文化的日益普及 参与开源 似乎也变成了一种时尚 一时间 似乎大家都乐于把自己的代码拿出来分享了 就在新年前夕 我的一位老朋友 一位向来对开源嗤之以鼻的J2EE
  • 毕设 ssd tf_gpu2 predict.py 备份代码

    如图 代码所属 https github com bubbliiiing ssd tf2 怕到时候改坏了 unbelievable 不是 import time import cv2 import numpy as np import te
  • 数据结构顺序表和链表(超详细)

    线性表 线性表 linear list 是 n 个具有相同特性的数据元素的有限序列 线性表是一种在实际中广泛使 用的数据结构 常见的线性表 顺序表 链表 栈 队列 字符串 线性表在逻辑上是线性结构 也就说是连续的一条直线 但是在物理结构上并
  • Java中如何编解码

    继续学习Java Web的编解码章节 记录Java中如何把ISO 8859 GB 2312 GBK UTF 16 UTF 8编码进行编码 额 System out printf x int b i 这句代码没有懂 希望大家评论帮忙解决 pu
  • html嵌入地图

    一 打开 百度地图生成器 的网址 http api map baidu com lbsapi creatmap index html 复制代码 保存html 二 在需要地图的位置 插入这行代码 长宽大小可以自定义 三 效果
  • javaweb应用的MVC分层,开发太方便了!!!

    javaweb应用的MVC分层 让我们先来了解一下 MVC开发模式的组成吧 看完这张图 你有什么看法 知道了这样的开发模式后 动手创建一个工程吧 如图是根据上图创建的一个实例 当然有很多的优点 相对于javaweb的初级开发 优点 耦合性低
  • C++简介

    C 是一种计算机高级程序设计语言 由C语言扩展升级而产生 最早于1979年由本贾尼 斯特劳斯特卢普在AT T贝尔工作室研发 C 既可以进行C语言的过程化程序设计 又可以进行以抽象数据类型为特点的基于对象的程序设计 还可以进行以继承和多态为特
  • SpringFramework核心技术一(IOC容器:IOC容器和Bean介绍)

    题记 做技术还是得一步步慢慢来 先搞懂核心原理 一味的只会用 是没有未来的啊 在现在的区块链公司当带着大家做项目的时候 我就经常说作为一名工程师 一定不能浮于表面 如果想在技术这条路上走下去 懂原理才是根本 现在框架太多 但是Spring依
  • JetBrains出品必属精品

    文章目录 JetBrains出品必属精品 数据库工具DataGrip 使用背景 工具优势 新手使用说明及常用设置说明 总结说明 JetBrains出品必属精品 数据库工具DataGrip 使用背景 笔者从业七八年 用过的数据库工具不下四五个
  • Linux 查看服务器开放的端口号

    在讨论这个问题前 我们先来了解一下物理端口 逻辑端口 端口号等计算机概念 端口相关的概念 在网络技术中 端口 Port 包括逻辑端口和物理端口两种类型 物理端口指的是物理存在的端口 如ADSL Modem 集线器 交换机 路由器上用 于连接
  • 二分查找-(在一个有序数组查找某个数字n)

    1 二分查找 注意前提 有序数组 传统方法查找的代码演示 include
  • 第二篇:mysql负载均衡、高可用方案:mysqlcluster+haproxy+keepalived

    上一篇介绍了mysqlcluster的安装和配置 本篇将描述高可用的mysql集群组建方式 高可用的mysql集群有多种方式 本篇介绍的是 mysqlcluster haproxy keepalived方案 下篇将介绍通过普通版本的mysq
  • 转载layui树形表格

    地址 https whvse gitee io treetable lay index html README md treetable lay 实现layui的树形表格treeTable 1 简介 在layui数据表格之上进行扩展实现 演
  • Kibana操作Elasticsearch-检索

    1 导入ES官方检索测试数据 本次使用kibana操作ES以这些数据为基础 ES在GitHub的地址 这段数据存在这个目录下 将这2000行json复制出来 2 使用Kibana将2000行数据导入到ES中 POST bank accoun