带你读《Elastic Stack 实战手册》之45:——3.5.4.Graph (下)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《Elastic Stack 实战手册》之45:——3.5.4.Graph (下)

《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.4.Graph (上) https://developer.aliyun.com/article/1228725


Elasticsearch 的实现方式


Elasticsearch 的 Graph 功能始于 5.5 版本,属于 X-pack 的扩展功能组,从 API 的路径

/_graph/explore 可以看出,其定位更倾向于是探索分析,即在已有的索引上通过聚合的方式进行分析。

 

常规的 graph 查询可以理解为,先进行两层嵌套的 terms 聚合,再将查询结果以 vertexs 和connections 的数据模型进行返回。

 

在使用 Graph 功能时,有3个核心要素,分别是 vertices、connections、controls,前两者主要用于确定图查询中,前者通过哪些字段产生,后者用于控制一些查询细节。

 

如希望通过点击日志探查用户的搜索词和点击的产品间的关联,可通过如下查询

POST clicklogs/_graph/explore
{
  "query": {                  
    "match": {
      "query.raw": "midi"
    }
  },
  "vertices": [               
    {
      "field": "product"
    }
  ],
  "connections": {            
    "vertices": [
      {
        "field": "query.raw"
      }
    ]
  }
}

查询语句中

 

l vertices 用于指定对哪些字段的内容感兴趣,后续会作为 target 节点处理,对应的字段必须是已索引的字段。

l connections 用于指定希望哪些字段和 vetices 的内容进行关联,后续会作为 source 节点处理,connections 也支持使用 query 缩小关联内容的范围。

 

这个查询会以聚合的方式得到最终结果,会产生类似两层嵌套 aggs 的查询效果

"aggs": {
"vertices": {
 "terms": {
        "field": "product"
      },
      "aggs": {
        "connections": {
          "terms": {
            "field": "query.raw"
          }
        }
      }
        }
  }

 查询结果会返回 vertices 和 connections 两个数组,通过这两部分数据,即可构成一个有向图(方向是由 connections 中设定的 query.raw 指向 vertices 中设定的 product)。

 

为了能更直观的反映每个节点,和每条边的重要程度,vertices 和 connections 的元素中均会额外返回一个 weight,这点也是 Elasticsearch Graph 区别于其他图数据库查询的功能点之一。

 

"vertices": [ 
      {
         "field": "query.raw",
         "term": "midi cable",
         "weight": 0.08745858139552132,
         "depth": 1
      },
      {
         "field": "product",
         "term": "8567446",
         "weight": 0.13247784285434397,
         "depth": 0
               }
],
"connections": [ 
      {
         "source": 0,
         "target": 1,
         "weight": 0.04802242866755111,
         "doc_count": 13
      }
]

除了上述例子所举的常规查询模式外,Elasticsearch 的 Graph API 还可以通过 controls 控制采样规模和 weight 的计算:

 

use_significance(默认 false)

 

如设置为 true,第二层的聚合将会变为 Significant Terms,得到的 weight 会是通过前置和后置频率算出的,可用来发现一些有趣,或不寻常的节点或关系。

 

sample_size(默认100)

 通过减少采样规模,可以有效提高检索效率

 

除此以外,Elasticsearch 还支持通过 Kibana 配置 Graph 相关的可视化页面,借此可以快速将上述查询得到的结果以图形化的方式进行展现。以下示例基于 7.10 操作:

 

1、在 Kibana 中选择 Graph 进入导航页面;

2、选取一个数据源,即库中已存在的索引;

image.png

添加字段并触发查询即可得到如下的图结构分析页面 (可变更颜色区分节点),上文提及的 weight 值将通过节点间连线的粗细体现。

image.png


总结

 

高可用和近实时的能力

 

Elasticsearch 的 Graph 功能通过 X-pack 提供,其优点是可以对库中已有的数据,快速进行分析,且具备可视化能力。其天然具备高可用和近实时的能力。

 

千万以及亿级的数据进行 Graph 分析

 

依托于已有的倒排索引和聚合功能,可以快速以 vertices 和 connections 的数据模型呈现结果。由于聚合本身需要消耗较大的内存和计算量,在使用时需要留意数据量级和系统资源,在资源允许的情况下,可以支持对千万以及亿级的数据进行 Graph 分析。

 

当然 Elasticsearch 的 Graph 也存在一定局限性,它本身定位是对已有索引进行分析,因此不适合需要建模管理图结构数据的场景,且无法对多跳的路径查询进行有效支持。

 

并且 Elasticsearch Graph 内部的处理逻辑,是通过对索引进行字段级的聚合,因此产生关系的上下游节点仅限于同一索引中的不同字段。

 

综上,如果你希望发现索引中不同字段的一些潜在价值,不妨使用 Elasticsearch Graph 功能来进行探索。

 

参考资料

 

l https://www.elastic.co/guide/en/elasticsearch/reference/master/graph-explore-api.html

l https://www.elastic.co/guide/en/kibana/current/graph-getting-started.html

l https://nebula-graph.io/posts/review-on-graph-databases/

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
Rust C++ NoSQL
在 VS Code 上配置Rust的调试环境
插件 在 VS Code 上进行 Rust 的开发,需要使用一下两个库 RLS(vscode搜索插件rls) lldb(vscode搜索插件codelldb) 安装很简单,不用说 配置 { // 使用 IntelliSense 了解相关属性。
6798 0
|
数据可视化 数据挖掘 BI
工时管理系统怎么选?用对工具助你快速提升效率
工时管理是团队管理和项目推进的核心工具,有助于了解任务进展、控制资源投入。本文解析了工时管理的实际需求和常见痛点,并推荐了几款实用的工时管理系统,如板栗看板、RescueTime、Clockify、Toggl Track 和 Harvest,帮助提升管理效率。
272 1
|
6月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
3238 0
|
12月前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
277 28
|
人工智能 安全 JavaScript
Open Interpreter:AI 赋能终端!在终端中对话AI模型进行编程,通过运行代码来完成各种计算机操作任务
Open Interpreter 是一个让语言模型运行代码的强大工具,提供了一个类似 ChatGPT 的界面,支持多种编程语言和丰富的功能。
730 7
Open Interpreter:AI 赋能终端!在终端中对话AI模型进行编程,通过运行代码来完成各种计算机操作任务
|
机器学习/深度学习 API Python
机器学习特征降维
这篇内容概述了特征降维在机器学习中的重要性,包括三个主要方法:低方差过滤法、PCA(主成分分析)和相关系数法。低方差过滤法通过删除方差低于阈值的特征来减少无关信息;PCA通过正交变换降低数据的维数,保留大部分信息;相关系数法(如皮尔逊和斯皮尔曼相关系数)用于评估特征间的相关性,去除高度相关的特征以简化模型。这些技术有助于提高模型效率和泛化能力。
|
存储 Android开发 Kotlin
开发安卓app OKhttp下载后使用MediaPlayer播放
在Android Jetpack Compose应用程序中,要使用OkHttp下载远程音频文件并在本地播放,你需要完成以下几个步骤: 1. **添加依赖**:确保`build.gradle`文件包含OkHttp和Jetpack Compose的相关依赖。 2. **下载逻辑**:创建一个`suspend`函数,使用OkHttp发起网络请求下载音频文件到本地。 3. **播放逻辑**:利用`MediaPlayer`管理音频播放状态。 4. **Compose UI**:构建用户界面,包含下载和播放音频的按钮。
|
存储 资源调度 NoSQL
带你读《Elastic Stack 实战手册》之45:——3.5.4.Graph (上)
带你读《Elastic Stack 实战手册》之45:——3.5.4.Graph (上)
279 0
【C/PTA】选择结构专项练习(额外)
【C/PTA】选择结构专项练习(额外)
615 0
|
关系型数据库 MySQL
mysql 查询当天、本周,本月,上一个月的数据
mysql 查询当天、本周,本月,上一个月的数据 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( )...
5186 0