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

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


在服务端测试过程中我们会碰到提测阶段的新功能研发中,需要查询数据库去验证数据的准确性以及完整性的时候,此时如果研发用到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": {
                              ...
                            }
                          }

                          最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
                          在这里插入图片描述​​​​
                          在这里插入图片描述​​​​

                          评论
                          添加红包

                          请填写红包祝福语或标题

                          红包个数最小为10个

                          红包金额最低5元

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

                          抵扣说明:

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

                          余额充值