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

本文介绍了ElasticSearch中的检索方式,包括通过URI和请求体两种方式,详细解析了match、match_phrase、multi_match、bool等QueryDSL查询语法,并通过实例展示了如何进行条件匹配和结果过滤。同时,探讨了term、match、match_phrase的区别,帮助读者理解ElasticSearch的检索机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.知识回顾

【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 领域特定语言)常用的字段使用场景】就先学习到这里,更多的内容持续创作更新中。

<think>首先,用户的问题是关于在Kibana中执行Elasticsearch的CRUD操作(增删改)而不使用DSL询语句。DSLDomain Specific Language)是Elasticsearch语言。 用户提到“不使用DSL询语句”,所以我需要解释如何通过Kibana的界面或其他方式执行CRUD操作,而不是直接DSL询。 Kibana是一个数据可视化工具,用于Elasticsearch。它提供了多种方式Elasticsearch交互: 1. **Dev Tools Console**:Kibana有一个Dev Tools部分,允许用户运行REST API命令。这通常涉及写JSON请求,但用户说“不使用DSL询语句”。DSL通常指的是询部分,但CRUD操作可以通过REST API直接执行。 2. **Management UI**:Kibana的Management部分允许用户管理索引、索引模板、映射等。这可以通过UI界面执行一些操作,而不需要写代码。 3. **Discover**:在Discover标签中,用户可以看和搜索数据,但修改数据可能需要通过API。 4. **Canvas** 或 **Dashboard**:这些主要用于可视化,不直接支持CRUD操作。 关键点是:CRUD操作通常通过Elasticsearch的REST API执行。在Kibana中,Dev Tools Console是主要的地方来执行这些API调用。 但是,用户说“不使用DSL询语句”。DSL特指询部分,如match、term等询。CRUD操作包括: - **Create ()**:添加文档。这通常使用PUT或POST请求。 - **Read ()**:检索文档。这可以使用GET请求。 - **Update ()**:更新文档。使用POST或PUT请求。 - **Delete ()**:删除文档。使用DELETE请求。 这些操作可以通过简单的HTTP请求执行,而不需要复杂的DSL询。例如: - 创建文档:`POST /index/_doc { "field": "value" }` - 读取文档:`GET /index/_doc/id` - 更新文档:`POST /index/_update/id { "doc": { "field": "new_value" } }` - 删除文档:`DELETE /index/_doc/id` 在Kibana的Dev Tools Console中,用户可以输入这些命令。 用户可能想通过UI界面执行这些操作,而不写任何代码。Kibana的Management部分允许管理索引(如创建、删除索引),但对于文档级别的CRUD,它没有直接的UI。用户通常需要Dev Tools或API。 另一个方式使用Kibana的**Saved Objects**或**Index Patterns**,但那些主要用于配置,而不是文档CRUD。 所以,在回答中,我应该解释: -Kibana中,执行CRUD操作主要通过Dev Tools Console,使用Elasticsearch的REST API。 - 这些API调用不涉及DSL询;它们是简单的HTTP方法。 - 提供示例代码。 - 如果用户想避免写代码,建议使用其他工具如Postman,或通过Kibana的UI进行搜索(但搜索可能涉及DSL)。 参考用户提供的引用: - 引用[1]: 关于REST访问模式,强调API命令的普遍性。 - 引用[2]: 关于高性能计算库,不直接相关。 - 引用[3]: 关于HTTP客户端库,如Feign、OkHttp等,这些是用于编程的,而不是Kibana。 用户上一次的问题是关于Elasticsearch的,但在这个上下文中,用户说“我想用户想了解如何在Kibana中执行Elasticsearch的增删改操作”,所以我应该专注于Kibana。 回答结构: 1. **介绍**:解释在Kibana中执行CRUD操作的主要方式。 2. **使用Dev Tools Console**:详细说明如何访问和使用它。 3. **示例操作**:提供CRUD的示例命令。 4. **替代方法**:提到UI界面的限制和其他选项。 5. **相关问题**:根据系统指令,生成相关问题。 最后,添加引用标识。引用来自用户提供的文本,但我需要自然地融入。 在回答中,使用中文。 系统指令要求: - 行内数学表达式用$...$,但这里可能不需要,因为主题是Kibana/Elasticsearch,不是数学。 - 独立公式用$$...$$,同样可能不需要。 - LaTeX语法正确:确保任何公式正确。 - 使用中文回答。 - 生成相关问题。 - 引用的段落末尾添加引用标识。 在回答末尾,添加相关问题。 草拟回答: "在Kibana中执行Elasticsearch的CRUD操作(增删改)而不使用DSL询语句,主要通过Kibana的Dev Tools控制台执行Elasticsearch的REST API命令。这些API调用使用简单的HTTP方法,如GET、POST、PUT、DELETE,而不涉及复杂的DSL[^1]。 ### 使用Kibana Dev Tools执行CRUD操作 1. **访问Dev Tools**:在Kibana左侧菜单中,选择"Dev Tools"。 2. **创建文档(Create)**: ``` POST /your_index/_doc { "field1": "value1", "field2": "value2" } ``` 这将创建一个新文档。 3. **读取文档(Read)**: ``` GET /your_index/_doc/document_id ``` 检索指定ID的文档。 4. **更新文档(Update)**: ``` POST /your_index/_update/document_id { "doc": { "field1": "new_value" } } ``` 部分更新文档。 5. **删除文档(Delete)**: ``` DELETE /your_index/_doc/document_id ``` 删除指定ID的文档。 这些操作直接在Dev Tools的Console中运行,不需要编写DSL询[^1]。 ### 替代方法 - 对于搜索操作,Kibana的"Discover"标签允许通过UI搜索数据,但底层可能使用DSL。如果您想避免DSL,可以使用简单询字符串或UI过滤器。 - 管理索引(如创建或删除索引)可以通过Kibana的"Management" > "Index Management"界面完成,但文档级别的CRUD需要API调用。 - 其他工具如Postman或cURL也可以用于执行这些API。 如果您需要完全避免任何代码编写,Kibana没有内置的UI用于文档CRUD;建议使用Elasticsearch的客户端库或工具[^3]。 §§相关问题§§ 1. 如何在Kibana使用DSL进行高级询? 2. Kibana Dev Tools有哪些高级功能? 3. Elasticsearch CRUD操作的最佳实践是什么? 4. 如何通过编程方式执行Elasticsearch CRUD操作?" 在回答中,我引用了[^1]和[^3],因为引用[1]提到REST访问模式,引用[3]提到HTTP客户端。 确保回答真实可靠:基于我对KibanaElasticsearch的知识。</think>在Kibana中执行Elasticsearch的CRUD操作(增删改)而不使用DSLDomain Specific Language询语句,主要通过Kibana的Dev Tools控制台执行Elasticsearch的REST API命令。这些API调用基于简单的HTTP方法(如GET、POST、PUT、DELETE),不涉及编写复杂的DSL(如match、term等询语法)。Elasticsearch的RESTful设计使得这些操作直接且高效,遵循了其核心访问模式[^1]。以下是详细步骤和示例,确保操作真实可靠(基于Elasticsearch 7.x及以上版本和Kibana 7.x)。 ### 1. **访问Kibana Dev Tools** -Kibana左侧导航菜单中,点击"Dev Tools"(开发工具)。 - 这将打开一个控制台界面,允许您直接输入Elasticsearch REST API命令。 - 此界面不需要DSL询,只需使用标准的HTTP方法和JSON体[^1]。 ### 2. **CRUD操作示例** 以下示例假设您有一个名为`my_index`的索引(如果不存在,Kibana会自动创建)。所有命令在Dev Tools控制台中执行,无需DSL语法。 - **Create ():添加新文档** - 使用`POST`或`PUT`方法添加文档。如果未指定ID,Elasticsearch会自动生成。 - 示例命令: ```json POST /my_index/_doc { "name": "John Doe", "age": 30, "email": "john@example.com" } ``` - 响应示例:返回文档ID(如`"_id": "1"`),表示创建成功。 - **Read ()检索文档** - 使用`GET`方法根据文档ID获取数据。不涉及DSL,仅需ID。 - 示例命令: ```json GET /my_index/_doc/1 ``` - 响应示例:返回指定ID的文档内容。 - **Update ():更新文档** - 使用`POST`方法部分更新文档字段。避免使用`_update_by_query`(可能涉及DSL)。 - 示例命令: ```json POST /my_index/_update/1 { "doc": { "age": 31 } } ``` - 响应示例:显示更新状态(如`"result": "updated"`)。 - **Delete ():删除文档** - 使用`DELETE`方法移除文档。仅需文档ID。 - 示例命令: ```json DELETE /my_index/_doc/1 ``` - 响应示例:返回删除确认(如`"result": "deleted"`)。 这些操作完全基于HTTP请求,不依赖DSL询语法,且直接Kibana控制台运行[^1]。 ### 3. **替代方法(避免代码编写)** - **Kibana UI界面**: - **Discover标签**:可用于搜索和看数据,但修改操作(增、删、改)无法通过UI直接完成;搜索时如果使用简单询字符串(如Kibana的搜索栏),底层可能生成DSL,但用户无需手动编写。 - **Management > Index Management**:允许创建或删除索引(如`DELETE /my_index`),但不支持文档级CRUD。索引管理是UI驱动的,无需DSL- 局限性:Kibana没有内置的图形化界面用于文档级CRUD(如表格编辑),因此Dev Tools或外部工具更推荐。 - **其他工具**: - 使用HTTP客户端工具如Postman或cURL,发送相同API请求。这避免了Kibana,但原理相同[^3]。 - 对于编程方式,HTTP客户端库如OkHttp或Retrofit可以集成到应用中[^3]。 ### 注意事项 - **权限要求**:确保用户有KibanaElasticsearch的适当权限(如kibana_user角色)。 - **错误处理**:如果命令语法错误,Dev Tools会返回详细错误信息(如索引不存在)。 - **性能**:这些API调用高效且直接,适合高频操作,但批量处理建议使用`_bulk` API(仍无需DSL)。 - 如果您必须完全避免任何代码,建议使用Elasticsearch的官方客户端库(如JavaScript或Python),它们提供更高级的封装[^3]。 通过Dev Tools执行CRUD是Kibana中最直接方式,无需学习DSL即可管理数据[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

硕风和炜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值