软件测试人员必知必会的ES数据库!

在服务端测试过程中我们会碰到提测阶段的新功能研发中,需要查询数据库去验证数据的准确性以及完整性的时候,此时如果研发用到Elasticsearch数据库。那我们不熟悉该如何去做呢,我们先来熟悉下这个数据库


一、ES(Elasticsearch)


1.类型:Elasticsearch是一种基于Lucene的分布式搜索引擎,它兼具NoSQL数据库的特性,主要用于全文搜索、结构化搜索、分析等场景。


2.作用

  • 高效全文搜索

Elasticsearch提供了强大的全文搜索功能,支持复杂的查询语法和多种数据类型,能够快速响应用户查询需求。其全文搜索的实现依赖于倒排索引,这种数据结构使得搜索引擎能够快速定位包含查询词的文档。

  • 实时数据分析

Elasticsearch具备实时数据处理能力,能够在数据写入后几乎立即提供查询和分析结果,这使得其在金融、电子商务等需要快速响应的行业中具有广泛应用。

  • 可扩展性强

Elasticsearch的分布式架构设计使其具备很强的可扩展性。用户可以通过增加节点来扩展集群的容量和性能,从而处理更大的数据量和更高的查询并发。

  • 灵活的数据结构

Elasticsearch支持灵活的数据结构,允许用户存储和查询各种类型的数据,包括结构化、半结构化和非结构化数据。

  • 企业级安全性和权限管理

通过X-Pack插件,Elasticsearch提供了细粒度的权限管理、数据加密、审计日志等安全功能,满足企业在数据保护和合规性方面的需求。

二、数据结构

Elasticsearch(ES)数据库的数据结构主要围绕索引(Index)、文档(Document)和字段(Field)来构建。以下是一个具体的例子,用于说明ES数据库中的数据结构,并主要体现索引字段的特点:

1.索引(Index)

  • 名称:products

  • 功能:用于存储所有产品信息的索引。

2.文档(Document)

  • 在Elasticsearch中,每个产品都表示为一个文档。

  • 文档以JSON格式存储,包含多个字段。

3.字段(Field)

  • 每个文档包含多个字段,用于描述产品的不同属性。

  • 字段可以包含不同类型的数据,如文本、数值、日期等。

三、示例场景

假设我们有一个电子商务平台,需要存储和搜索产品信息。在Elasticsearch中,我们可以创建一个名为products的索引来存储这些信息。


示例数据

以下是一个示例文档,展示了在products索引中可能存储的产品信息:

{  "product_id": "12345",       // 产品ID,数值类型  "product_name": "Laptop",    // 产品名称,文本类型  "category": "Electronics",   // 产品类别,文本类型  "price": 999.99,             // 产品价格,数值类型  "description": "A powerful laptop for professionals.", // 产品描述,文本类型  "release_date": "2023-01-01" // 产品发布日期,日期类型}

索引字段详解

  • product_id
    • 类型:数值类型(如long)

    • 用途:唯一标识每个产品。

  • product_name
    • 类型:文本类型(如text)

    • 用途:存储产品的名称,支持全文搜索。

  • category
    • 类型:文本类型(如keyword)

    • 用途:存储产品的类别,通常用于过滤和聚合查询。

  • price
    • 类型:数值类型(如float或double)

    • 用途:存储产品的价格,支持范围查询和排序。

  • description
    • 类型:文本类型(如text)

  •     用途:存储产品的详细描述,支持全文搜索。

  • release_date
    • 类型:日期类型(如date)

    • 用途:存储产品的发布日期,支持日期范围查询和排序。

注意事项

  • 在Elasticsearch中,字段的数据类型由字段的属性type指定。

  • 字段可以具有其他属性,如index(控制字段是否编入索引被搜索)、store(指定是否将字段的原始值写入索引)、boost(字段级别的助推,定义字段在文档中的重要性/权重)等。

  • Elasticsearch支持动态映射(根据文档中的字段自动创建映射关系)和显式映射(手动定义字段类型)。


四、示例查询

以下是一个示例查询语句,用于在products索引中搜索产品名称为“Laptop”的文档:

GET /products/_search{  "query": {    "match": {      "product_name": "Laptop"    }  }}
综上所述,Elasticsearch数据库的数据结构通过索引、文档和字段来组织数据,每个字段都可以具有不同的数据类型和属性,以满足各种搜索和查询需求。
在Elasticsearch中,GET /{索引名}/_search 中的 {索引名} 并不是传统关系型数据库中的“表名”,而是Elasticsearch中的“索引名”。Elasticsearch是一个基于Lucene的搜索引擎,它使用索引(Index)来存储和组织数据。

在Elasticsearch中,索引类似于关系型数据库中的数据库(Database)或表(Table)的概念,但它更加灵活和强大。一个索引可以包含多个文档(Document),每个文档是一个JSON对象,可以包含多个字段(Field)。这些字段可以包含不同类型的数据,如文本、数值、日期等。

当你执行一个搜索查询时,你需要指定在哪个索引中进行搜索。这个索引名就是你在创建索引时指定的名称,它用于在Elasticsearch集群中唯一标识该索引。

ES(Elasticsearch)数据库的基础查询语句用法涉及多种查询类型,以满足不同的搜索需求。以下是一些常用的基础查询语句及其用法:

一、基本查询结构

在Elasticsearch中,查询通常具有以下基本结构:

GET /{索引名}/_search{  "query": {    "{查询类型}": {      "{查询条件}": "{查询条件值}"    }  }}

其中,{索引名}是你要搜索的索引,{查询类型}是查询的类型(如match_all、match、term等),{查询条件}和{查询条件值}则根据具体的查询类型而定。

二、常用查询类型及用法

查询所有(match_all)用于返回索引中的所有文档。

GET /{索引名}/_search{  "query": {    "match_all": {}  }}
全文检索查询(match)用于执行全文检索,适合搜索文本字段。
GET /{索引名}/_search{  "query": {    "match": {      "{字段名}": "{查询文本}"    }  }}
例如,查询城市字段中包含“York”的文档:
GET /my_index/_search{  "query": {    "match": {      "city": "York"    }  }}
精确匹配查询(term)用于对某个字段的精确值进行查询,常用于不分词的字段(如ID、标签、关键词等)。
GET /{索引名}/_search{  "query": {    "term": {      "{字段名}": "{精确值}"    }  }}
例如,查询城市字段为“zhengzhou”的文档:
GET /my_index/_search{  "query": {    "term": {      "city": "zhengzhou"    }  }}
范围查询(range):用于查询数值、日期、时间等范围内的数据。
GET /{索引名}/_search{  "query": {    "range": {      "{字段名}": {        "gte": {起始值},        "lte": {结束值}      }    }  }}
范围参数可以只写一个,例如仅保留"gte": 100,则代表字段值大于等于100。其他范围参数包括:

 gt:大于(>)

 gte:大于且等于(>=)

 lt:小于(<)

 lte:小于且等于(<=)

布尔查询(bool):用于组合多个子查询,支持逻辑操作符AND(must)、OR(should)和NOT(must_not)以及过滤器(filter)。

GET /{索引名}/_search{  "query": {    "bool": {      "must": [        {          "{查询类型}": {            "{字段名}": "{查询条件值}"          }        }      ],      "must_not": [        {          "{查询类型}": {            "{字段名}": "{查询条件值}"          }        }      ],      "should": [        {          "{查询类型}": {            "{字段名}": "{查询条件值}"          }        }      ],      "filter": [        {          "{查询类型}": {            "{字段名}": "{查询条件值}"          }        }      ]    }  }}
例如,查询城市为“zhengzhou”且不为“shanghai”的文档,或者城市为“changsha”的文档:
GET /my_index/_search{  "query": {    "bool": {      "must": [        {          "match": {            "city": "zhengzhou"          }        }      ],      "must_not": [        {          "match": {            "city": "shanghai"          }        }      ],      "should": [        {          "match": {            "city": "changsha"          }        }      ]    }  }}
前缀匹配查询(prefix):用于查询字段值的前缀匹配,常用于搜索补全或模糊搜索。
GET /{索引名}/_search{  "query": {    "prefix": {      "{字段名}": "{前缀值}"    }  }}
通配符查询(wildcard):支持*(匹配任意字符)和?(匹配单个字符)的通配符查询。
GET /{索引名}/_search{  "query": {    "wildcard": {      "{字段名}": "{通配符模式}"    }  }}
模糊查询(fuzzy):用于查询与某个值相似的字段,常用于容忍拼写错误的场景。
GET /{索引名}/_search{  "query": {    "fuzzy": {      "{字段名}": {        "value": "{模糊值}"      }    }  }}
例如,查询城市字段与“shangh”相似的文档:
GET /my_index/_search{  "query": {    "fuzzy": {      "city": "shangh"    }  }    }
三、其他常用功能

分页_通过from和size参数设置分页,相当于SQL的limit和offset结构。

GET /{索引名}/_search{  "from": {起始位置},  "size": {每页大小}}
排序_使用sort子句设置排序条件,类似SQL的order by语句。
GET /{索引名}/_search{  "query": {    ...  },  "sort": [    {      "{字段名1}": {        "order": "asc" // 或 "desc"      }    },    {      "{字段名2}": {        "order": "asc" // 或 "desc"      }    }  ]}
源字段过滤_使用_source参数控制哪些字段需要返回,哪些不需要返回。
GET /{索引名}/_search{  "_source": ["{字段名1}", "{字段名2}"],  "query": {    ...  }}
或者指定includes和excludes:
GET /{索引名}/_search{  "_source": {    "includes": ["{字段名1}", "{字段名2}"],    "excludes": ["{字段名3}"]  },  "query": {    ...  }}

Python 学习指南:主要应用方向及详细学习路线

在 Python 中如何设计插件化系统?

入门必学Python命令(下)

入门必学Python命令(上)

第一批用DeepSeek做测试的人赢麻了!漏测率狂降83%,效率飙升5倍!

超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方DeepSeek接入),建议收藏!

Python 常见配置文件写法全解,这篇超全攻略必看!

软件测试工程师需要知道的redis知识..

领取全栈软件测试工程师学习资料

添加下方小编微信备注"资料"

图片

爱分享的人,运气都不会太差图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值