【ELK】Elasticsearch入门04 -- 基础语法 查询语法(全文检索、多字段匹配、词条匹配、模糊检索、结果过滤)

2023-11-10

【ELK】Elasticsearch入门04 – 基础语法 查询语法(全文检索、多字段匹配、词条匹配、模糊检索、结果过滤)

 

查询所有数据

GET /索引名/_search
{
  "query" : {
    "match_all": {}
  }
}
GET /test/_search

{
  "query" : {
    "match_all": {}
  }
}

返回
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "age" : "33"
        }
      }
    ]
  }
}

全文检索

只要分词中包含即可检索出,如下zhang er 分词为zhang和er,其中zhang与索引中数据的zhang匹配上,所以将zhang san检索出来

GET /索引名/_search
{
  "query": {
    "match": {
      "字段名": "检索值"
    }
  }
}
GET /test/_search
{
  "query": {
    "match": {
      "name": "zhang er"
    }
  }
}

返回
{
  "took" : 149,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.13353139,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.13353139,
        "_source" : {
          "name" : "zhang san",
          "age" : "23",
          "sex" : "false"
        }
      }
    ]
  }
}

如果需要所有分词都匹配才检索出结果则采用下面检索方式,如下面zhang er分词为zhang 和 er,但是索引中数据为zhang san ,只匹配上了zhang ,san未匹配中,所以未检索出数据。

GET /索引名/_search
{
  "query": {
    "match": {
      "字段名": {
      ”query“ : "检索值",
        ## 如果需要目标内容包含检索值的所有分词,则需要设置and。默认为or
      "operator":"and"
      }
    }
  }
}

GET /test/_search
{
  "query": {
    "match": {
      "name": {
        "query": "zhang er",
         "operator":"and"
      }
    }
  }
}

返回

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "zhang san",
          "age" : "23",
          "sex" : "false"
        }
      }
    ]
  }
}

多字段匹配

同一个检索值匹配多个字段

GET /索引名/_search
{
  "query":{
    "multi_match": {
      "query": "检索值",
      "fields": [“字段1”,“字段2”]
    }
  }
}
GET /test/_search
{
  "query":{
    "multi_match": {
      "query": "zhang san",
      "fields": ["name"]
    }
  }
}

返回
{
  "took" : 301,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.3862942,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.3862942,
        "_source" : {
          "name" : "zhang san",
          "age" : "22",
          "sex" : "false"
        }
      }
    ]
  }
}

词条匹配

trem 精确查询,对查询的值不分词,直接进倒排索引去匹配。这也如果索引类型为text则不一定会检索出来。因为倒排索引中text类型是分词后的数据,如果检索值不分词可以与倒排索引中分词的值匹配上则可以查出。

GET /索引值/_search
{
  "query":{
    "term": {
      "字段名": {"value" : "字段值"}
    }
  }
}
GET /test/_search
{
  "query":{
    "term": {
      "name": {"value" : "zhang san"}
    }
  }
}

返回:
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}
GET /test/_search
{
  "query":{
    "term": {
      "name": {"value" : "zhang"}
    }
  }
}

返回:
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.38845783,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.38845783,
        "_source" : {
          "name" : "zhang san",
          "age" : "22",
          "sex" : "false"
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 0.32969955,
        "_source" : {
          "name" : "zhang san li",
          "age" : "22",
          "sex" : "false"
        }
      }
    ]
  }
}

从上面可以看出zhang san作为一个整体去text类型字段的倒排索引中找,没有找到这个分词的记录所以没有结果。而zhang作为整体去text类型字段的倒排索引张找可以找到zhang这个分词的记录,所以将符合条件的两个结果列出。

模糊查询

当单词长度为1-2个字母时,其可编辑距离为0
当单词长度为3-5个字母时,其可编辑距离为1
当单词长度大于等于6时,其可编辑距离为2
对单词中一个字母进行增,删,改,为一个可编辑距离

GET /test/_search
{
  "query":{
    "fuzzy": {
      "字段名": {"value" : "检索值"}
    }
  }
}

如下例子,zhangsa总长度为7,那么去除sa两个字母,即两个可编辑距离,则变为zhang。那么就将zhang的记录都匹配出来了

GET /test/_search
{
  "query":{
    "fuzzy": {
      "name": {"value" : "zhangsa"}
    }
  }
}

返回:
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.29950577,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.29950577,
        "_source" : {
          "name" : "zhang san",
          "age" : "22",
          "sex" : "false"
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 0.25249034,
        "_source" : {
          "name" : "zhang san li",
          "age" : "22",
          "sex" : "false"
        }
      }
    ]
  }
}

结果过滤

表明检查结果需要返回哪些字段,未标明的不返回

显示该字段
“_source”:"字段名"
显示下面字段
“_source”:["字段名1","字段名2"]
不显示以下字段
“_source”: {"excludes":"字段名"}
GET /test/_search
{
 "_source": {"excludes":"sex"},
  "query":{
    "fuzzy": {
      "name": {"value" : "zhangsa"}
    }
  }
}

返回:
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.29950577,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.29950577,
        "_source" : {
          "name" : "zhang san",
          "age" : "22"
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 0.25249034,
        "_source" : {
          "name" : "zhang san li",
          "age" : "22"
        }
      }
    ]
  }
}

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

【ELK】Elasticsearch入门04 -- 基础语法 查询语法(全文检索、多字段匹配、词条匹配、模糊检索、结果过滤) 的相关文章

随机推荐

  • 《数值分析》-- 雅可比迭代法、高斯—塞德尔迭代法

    文章目录 一 基本迭代法的格式及收敛性 1 1 迭代法思想 1 2 向量序列收敛的定义 二 迭代法的收敛与发散 三 雅可比迭代法和高斯赛德尔迭代法 3 1 雅可比迭代法 3 2 高斯 赛得尔 Gauss Seidel 迭代法 四 迭代法的收
  • python无法安装第三方库read time out_(python pip安装第三方库超时问题(raise ReadTimeoutErrorself._pool, None, 'Read time...

    python pip安装第三方库超时问题 raise ReadTimeoutErrorself pool None Read timed out pip工具安装 百度经验链接 pip安装及环境变量配置 pip下载超时处理 aise Read
  • Apache Shiro 简介

    本文转载自 点击打开链接 1 1 简介 Apache Shiro是Java的一个安全框架 目前 使用Apache Shiro的人越来越多 因为它相当简单 对比Spring Security 可能没有Spring Security做的功能强大
  • ztree 修改样式_zTree样式修改

    ztree挺好用的 不过公司美工设计的行政树图稿一般都比ztree原生的样式要好看的多 所以只能自己单独对样式进行修改 目前样式倒是修改好了 只能不能根据层级动态匹配样式 每个层级的被选中样式需要对两个属性单独设置 具体修改地方下面代码中有
  • java里%是什么_java里"."是什么意思?

    展开全部 lt 数学意义 在数字没有溢出的前提下 对于正数和负数 左移一位都相当于乘以2的1次方 左移n位就相当于乘以2的n次方 计算 3 lt lt 2 3 lt lt 2 则是将数字3左移2位 1 首先把3转换为二进制数字0000 00
  • python机器学习手写算法系列——逻辑回归

    从机器学习到逻辑回归 今天 我们只关注机器学习到线性回归这条线上的概念 别的以后再说 为了让大家听懂 我这次也不查维基百科了 直接按照自己的理解用大白话说 可能不是很严谨 机器学习就是机器可以自己学习 而机器学习的方法就是利用现有的数据和算
  • SQL11 高级操作符练习(1)

    描述 题目 现在运营想要找到男性且GPA在3 5以上 不包括3 5 的用户进行调研 请你取出相关数据 示例 user profile id device id gender age university gpa 1 2138 male 21
  • 牛客SQL练习一

    1 题目描述 查找最晚入职员工的所有信息 CREATE TABLE employees emp no int 11 NOT NULL birth date date NOT NULL first name varchar 14 NOT NU
  • springboot自定义favicon.ico

    先上效果图 1 在application yml文件中必须修改配置 spring mvc favicon enabled false spring mvc favicon enabled false 2 在static文件下 ico转化地址
  • LeetCode-Python-1248. 统计「优美子数组」(数组 + 数学)

    给你一个整数数组 nums 和一个整数 k 如果某个子数组中恰好有 k 个奇数数字 我们就认为这个子数组是 优美子数组 请返回这个数组中 优美子数组 的数目 示例 1 输入 nums 1 1 2 1 1 k 3 输出 2 解释 包含 3 个
  • base64格式图片展示

    后端发图片 为base64格式的 前端接收后页面展示图片 处理方法 let imageData data image png base64 res data image 后端传来数据 如果base64位图片没有带前面得头 data imag
  • clickhouse索引原理介绍

    clickhouse本身支持很多表引擎 这里只介绍其中最常用的MergeTree引擎 建表语句 name1 type1 DEFAULT MATERIALIZED ALIAS expr1 TTL expr1 name2 type2 DEFAU
  • cannot import name ‘Merge‘ from ‘keras.layers‘解决方法

    首先根据报错提示 找到对应的文件 看看Merge是否在keras layers里 发现现在已经改成下图的了 直接复制粘贴到代码里即可 报错提示为王 别再扎错方向
  • 数据清洗的基本流程_数据分析几步走?告诉你全面系统的流程

    通过对 谁说菜鸟不会数据分析 的阅读 我们知道数据分析的一般流程为 明确分析目标 一切以目标为导向 确定分析思路 数据获取 数据处理 清洗 转化 提取 计算等 数据分析及可视化 报表撰写 这就是数据分析的一般流程 本章我们就讲一下各个流程中
  • MySQl数据库必会sql语句(提升版)

    原文链接 http blog csdn net qq 32059827 article details 51778816 这一篇属于加强版 问题和sql语句如下 创建users表 设置id name gender sal字段 其中id为主键
  • 5V转1.8V稳压芯片,3.7V转1.8V稳压芯片

    5V转1 8V稳压芯片 3 7V转1 8V稳压芯片 5V转1 8V芯片 3 7V转1 8V芯片 5V转1 8V降压芯片 3 7V转1 8V降压芯片 5V转1 8V电路图 3 7V转1 8V电路图 锂电池3 7V输入和供电5V输入 降压转换成
  • 没有调试适配器,无法发送“variables”

    vs code调试报 没有调试适配器 无法发送 variables 今天在vs code调试node区块链应用时 点开打印内容 提示如上 并看不到打印内容 原因及解决方法 出现在这种情况是因为node调试比较特殊 执行调试完成之后进程退出
  • node接收文件

    目录 html nodejs详细实现 nodejs简单实现 html
  • 原生js + canvas 实现刻度尺效果

    欢迎访问我的 个人博客 手势事件 touchstart 手指按下 touchmove 手指移动 touchend 手指抬起 效果图 完整代码 ruler js var ruler 初始化刻度尺插件 el 容器 String height 刻
  • 【ELK】Elasticsearch入门04 -- 基础语法 查询语法(全文检索、多字段匹配、词条匹配、模糊检索、结果过滤)

    ELK Elasticsearch入门04 基础语法 查询语法 全文检索 多字段匹配 词条匹配 模糊检索 结果过滤 查询所有数据 GET 索引名 search query match all GET test search query ma