3.ES8.0

发布时间 2023-06-09 20:28:02作者: 22-10-21

4.ES8.0

4.1.新特性

1.减少内存堆使用,完全支持ARM架构,引入全新的方式以使用更少的存储空间,从而让每个节点托管更多的数据

2.降低查询开销,在大规模部署中成效尤为明显

3.提高日期直方图和搜索聚合的速度,增强了页面缓存的性能,并创建了一个新的搜索短语pre-filter

4.对矢量相似函数的支持

  1. 增加对自然语言处理 (NLP) 模型的原生支持,让矢量搜索功能更容易实现,让客户和员工能够使用他们自己的文字和语言来搜索并收到高度相关的结果。

  2. 直接在Elasticsearch中执行命名实体识别、情感分析、文本分类等,而无需使用额外的组件或进行编码。

  3. ES8.0基于Lucene9.0开发的,那些利用现代 NLP 的搜索体验,都可以借助(新增的)对近似最近邻搜索的原生支持,快速且大规模地实现。通过 ANN,可以快速并高效地将基于矢量的查询与基于矢量的文档语料库。

  4. 可以直接在Elasticsearch中使用PyTorchMachineLearning模型,并在

    Elasticsearch中原生使用这些模型执行推理。

4.2.新API操作

随着Type的概念被废除,为了适应数据结构的改变,ES官方从7.15版本开始建议使用新的ElasticsearchJavaClient

4.2.1.索引操作

普通写法

// 创建索引 
CreateIndexRequest request = new CreateIndexRequest.Builder().index("索引名字").build(); 
CreateIndexResponse createIndexResponse = client.indices().create(request); 

// 查询索引 
GetIndexRequest getIndexRequest = new 
GetIndexRequest.Builder().index("索引名字").build(); 
GetIndexResponse getIndexResponse = client.indices().get(getIndexRequest); 
 
// 删除索引 
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest.Builder().index("索引名字").build(); 
DeleteIndexResponse deleteIndexResponse = client.indices().delete(deleteIndexRequest); 

lambda写法

// 创建索引 
client.indices().create(p ->p.index("索引名字").acknowledged(); 

// 获取索引 
client.indices().get(req -> req.index("索引名字")).result()); 

// 删除索引 
client.indices().delete(reqbuilder -> reqbuilder.index("索引名字" ).acknowledged();

4.2.2.文档操作

普通写法

// 创建文档 
IndexRequest indexRequest = new IndexRequest.Builder().index("索引名字").id(文档id).document("文档内容").build(); 
IndexResponse index = client.index(indexRequest); 

lambda写法

// 创建文档 
System.oclient.index(req -> req.index("索引名字").id(文档id).document(文档内容) ).result()); 

4.3.EQL

4.3.1.介绍

EQL(EventQueryLanguage )事件查询语言是一种用于基于事件的时间序列数据(例如日志,指标和跟踪)的查询语言。

ElasticSecurity平台上,当输入有效的 EQL 时,查询会在数据节点上编译,执行查询并返回结果。这一切都快速、并行地发生,让用户立即看到结果。

优点

1.可以表达事件之间的关系:许多查询语言允许匹配单个事件。可以匹配不同事件类别和时间跨度的一系列事件。

2.学习曲线很低:EQL语法看起来像其他常见查询语言,可以直观地编写和读取查询,从而可以进行快速,迭代的搜索。

3.EQL设计用于安全用例: 尽管你可以将其用于任何基于事件的数据,但我们创建了 EQL 来进行威胁搜寻。 EQL 不仅支持危害指标(IOC)搜索,而且可以描述超出 IOC 范围的活动。

image-20230609184850236

4.3.2.SQL和ES的对应关系

虽然SQL和ES对数据的组织方式(以及不同的语义)有不同的术语,但它们的目的本质上是相同的。

SQL Elasticsearch 描述
Column field 对比两个,数据都存储在命名条目中,具有多种数据类型,包含一 个值。SQL 将此类条目称为列,而ES称为字段。注意:在ES中,一个字段可以包含多个相同类型的值(本质上是一个列表),而在 SQL 中,一个列可以只包含一个所述类型的值。ES SQL将尽最大努力保留 SQL 语义,并根据查询拒绝那些返回具有多个值的字段的查询
Row document Columns 和fields本身不存在;它们是 row 或 a 的一部分 document。两者的语义略有不同:row 趋于严格(并且有更多的强制执行),而 document 趋于更加灵活或松散(同时仍然具有结构)。
Table Index 执行查询的目标
Schema Mapping 在 RDBMS 中,schem 主要是表的命名空间,通常用作安全边界。 Elasticsearch 没有为它提供等效的概念。但是,当启用安全性时, Elasticsearch 会自动应用安全性强制,以便角色只能看到它被允许访问的数据
Database Cluster 实例 在 SQL 中,catalog 或者 database 从概念上可以互换使用,表示一组模式,即多个表。在 Elasticsearch 中,可用的索引集被分组在一个 cluster,语义也有所不同。database 本质上是另一个命名空间(可能对数据的存储方式有一些影响),而 Elasticsearch cluster 是一个运 行时实例,或者更确切地说是一组至少一个 Elasticsearch 实例(通常是分布式运行)。在实践中,这意味着虽然在 SQL 中,一个实例中可能有多个目录,但在 Elasticsearch 中,一个目录仅限于一个

虽然概念之间的映射并不完全是一对一的,语义也有所不同,但共同点多于差异。事实上,SQL 的许多概念可以在 Elasticsearch 中找到对应关系,并且这两者的术语也很类似

4.3.3.使用

查询中的请求体内容里面编写SQL

{ 
  "query": """     
  	这里编写SQL
  """ 
}

①查询所有索引

show tables

②查询指定索引

show tables like '索引名'
可以使用通配符的方式进行指定↓

③模糊查询索引

show tables like '%'

④查看索引结构

describe myindex

⑤SQL

这里面也可以写其他语言的SQL,例如mysql的

SELECT * FROM "索引名"

其他的语法也可以使用,例如where,group by,limit,聚合函数等