在服务端测试过程中我们会碰到提测阶段的新功能研发中,需要查询数据库去验证数据的准确性以及完整性的时候,此时如果研发用到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": { ... }}
第一批用DeepSeek做测试的人赢麻了!漏测率狂降83%,效率飙升5倍!
超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方DeepSeek接入),建议收藏!
领取全栈软件测试工程师学习资料
添加下方小编微信备注"资料"
爱分享的人,运气都不会太差