【4-ElasticSearch中的检索方式-Kibana测试-Query DSL(domain-specific language 领域特定语言)常用的字段使用场景】

一.知识回顾

【0.ElasticSearch专栏在这里哟,想要学习的可自行进入专栏学习】
【1-ElasticSearch的基本介绍与用途、ElasticSearch中一些基本的概念、倒排索引的基本概念】
【2-Docker安装部署ElasticSearch和Kibanan详细步骤】
【3-ElasticSearch入门-索引的创建删除更新查询-文档的创建删除更新查询-Kibanan导入elasticsearch官方测试数据-postman测试】

二.ElasticSearch中的检索方式

在ElasticSearch中支持两种检索方式:官方手册快速查找链接

  1. 通过使用REST request URL 发送检索参数(uri+检索参数)
  2. 通过使用REST request body 发送检索参数 (uri+请求体)

2.1 第一种方式

GET blank/_search # 检索bank下的所有信息,包括 type 和 docs

GET blank/_search?q=*&sort=account_number:asc

响应结果信息

信息描述
tookElasticSearch执行搜索的时间(毫秒)
time_out搜索是否超时
_shards有多少个分片被搜索了,统计成功/失败的搜索分片
hits搜索结果
hits.total搜索结果统计
hits.hits实际的搜索结果数组(默认为前10条文档)
sort结果的排序key,没有就按照score排序
score和max_score相关性得分和最高分(全文检索使用)

在这里插入图片描述

2.2 第二种方式

通过使用 REST request body 来反射检索参数 (uri+请求体)

GET bank/_search

第二种方式

GET blank/_search
{
   "query":{
       "match_all":{}
    },
    "sort":[
       {
           "account_number":"asc"  
       }
   ]
}

结果显示
在这里插入图片描述

三.Query DSL(domain-specific language 领域特定语言)

3.1 基本语法

ElasticSearch提供了一个可以执行的JSON风格的DSL(domain-specific language 领域特定语言),这个被称为Query DSL。

完整的语法结构

{
   QUERY_NAME:{
      ARGUMENT:VALUE,
      ARGUMENT:VALUE,...
   }
}

如果是针对某个字段,那么它的结构为

{
    QUERY_NAME:{
        FIELD_NAME:{
            ARGUMENT:VALUE,
            ARGUMENT:VALUE,...
        }
    }
}

案例模拟:
在这里插入图片描述

3.2 match

上面我们用到match_all是匹配所有的数据,接下来我们要学习的就是通过match进行条件匹配

如果对应的字段是基本类型(非字符串类型),则是精确匹配。

GET /blank/_search
{
  "query": {
    "match": {
      "balance": 49989
    }
  }
}

精确查找balance值为49989的相关信息

在这里插入图片描述

如果对应的字段是字符串类型,则是全文检索

# match--字符串类型
GET /blank/_search
{
  "query": {
    "match": {
      "address": "mill"
    }
  }
}

match返回的就是address中包含mill字符串的记录

在这里插入图片描述

3.3 match_phrase

将需要匹配的值当成一个整体单词(不分词)进行检索,短语匹配

# match_phrase 短语词组匹配,不分词
GET blank/_search
{
   "query":{
       "match_phrase":{
          "address":"mill road"
      }
   }
}

查询出address中包含 mill road的所有记录,并给出相关性得分

在这里插入图片描述

3.4 multi_match[多字段匹配]

# 多字段匹配
GET blank/_search
{
  "query": {
    "multi_match": {
      "query": "Mill Lee",
      "fields": ["address","firstname"]
    }
  }
}

查询出address或者firstname中包含Mill Lee的记录

在这里插入图片描述

3.5 布尔查询

  1. 布尔查询又叫组合查询,bool用来实现复合查询,bool把各种其它查询通过 must(与)、must_not(非)、should(或)的方式进行组合
  2. 复合语句可以合并任何其他查询语句,包括复合语句也可以合并,复合语句之间可以相互嵌套,可以表达非常复杂的逻辑。

必须是女性并且不能是28岁

# bool组合查询
GET blank/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "F"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "age": 28
          }
        }
      ]
    }
  }
}

必须是女性并且不能是28岁案例演示
在这里插入图片描述

3.6 filter结果过滤

并不是所有的查询都需要产生分数,特别是那些仅用于"filtering"的文档,为了不计算分数,ElasticSearch会自动检查场景并且优化查询的执行。

匹配所有的数据,并且balance的结果分数在大于15000并且小于25000之间的所有结果

GET /blank/_search
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 15000,
            "lte": 25000
          }
        }
      }
    }
  }
}

匹配所有的数据,并且balance的结果分数在大于15000并且小于25000之间的所有结果
在这里插入图片描述

3.7 term

和match一样,匹配某个属性的值,全文检索字段用match,其他非text字段匹配用term

# term 非字符串类型
GET /blank/_search
{
   "query":{
       "term":{
          "age":28
      }
   }
}

在这里插入图片描述

3.8 term、match、match keyword、match_phrase的区别

检索关键字使用场景
term非text使用
match在text中我们实现全文检索-分词
match keyword在属性字段后加.keyword 实现精确查询-不分词
match_phrase短语查询,不分词,模糊查询

好了,关于【4-ElasticSearch中的检索方式-Kibana测试-Query DSL(domain-specific language 领域特定语言)常用的字段使用场景】就先学习到这里,更多的内容持续创作更新中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值