Graph Explore API
graph ‘explore’ api 通过 /_graph/explore来访问.理解此API行为的最佳方法之一是使用Kibana graph插件可视化地单击connections的数据,然后查看“last request”面板。这个面板显示了最后一个用户操作的JSON请求/响应。
Basic exploration
最初的搜索通常以查询开始,以识别密切相关的term:
POST clicklogs/_graph/explore
{
"query": { (1)
"match": {
"query.raw": "midi"
}
},
"vertices": [ (2)
{
"field": "product"
}
],
"connections": { (3)
"vertices": [
{
"field": "query.raw"
}
]
}
}
(1) 一个查询被用来’播种’搜索-在这里,我们在clicklogs查找搜索’midi’的人.这里可以使用任何常见的elasticsearch查询语法来标识感兴趣的文档.
(2) 提供了一个字段列表-这里我们想要找到与’midi’搜索显著相关的product 代码.
(3) 再次提供字段列表-在这里,引导人们再次点击product查找其他的搜索term.
The response from a graph exploration is as follows:
{
"took": 0,
"timed_out": false,
"failures": [],
"vertices": [ (1)
{
"field": "query.raw",
"term": "midi cable",
"weight": 0.08745858139552132,
"depth": 1
},
{
"field": "product",
"term": "8567446",
"weight": 0.13247784285434397,
"depth": 0
},
{
"field": "product",
"term": "1112375",
"weight": 0.018600718471158982,
"depth": 0
},
{
"field": "query.raw",
"term": "midi keyboard",
"weight": 0.04802242866755111,
"depth": 1
}
],
"connections": [ (2)
{
"source": 0,
"target": 1,
"weight": 0.04802242866755111,
"doc_count": 13
},
{
"source": 2,
"target": 3,
"weight": 0.08120623870976627,
"doc_count": 23
}
]
}
(1) 被发现的所有vertices的数组.一个vertex是一个term,因此提供字段和term value.weight属性表示显著性得分,而depth则表示第一次遇到这个term时的hop-level.
(2) 数组中vertices之间的connections.source和target属性是vertices数组的索引,作为探索的一部分指出哪个vertices指向另一个vertices.doc_count值指示在分析的文档示例中找到了多少包含这对term的文档(这不是索引中所有文档的全局计数)
在Kibana Graph插件应用程序响应数据是可视化的图表如下:
Optional controls
前面的基本示例省略了几个具有默认值的参数。这个完整的示例说明了可以在图探究请求中使用的其他参数:
POST clicklogs/_graph/explore
{
"query": { (1)
"bool": {
"must": {
"match": {
"query.raw": "midi"
}
},
"filter": [
{
"range": {
"query_time": {
"gte": "2015-10-01 00:00:00"
}
}
}
]
}
},
"controls": {
"use_significance": true, (2)
"sample_size": 2000, (3)
"timeout": 2000, (4)
"sample_diversity": { (5)
"field": "category.raw",
"max_docs_per_value": 500
}
},
"vertices": [
{
"field": "product",
"size": 5, (6)
"min_doc_count": 10, (7)
"shard_min_doc_count": 3 (8)
}
],
"connections": {
"query": { (9)
"bool": {
"filter": [
{
"range": {
"query_time": {
"gte": "2015-10-01 00:00:00"
}
}
}
]
}
},
"vertices": [
{
"field": "query.raw",
"size": 5,
"min_doc_count": 10,
"shard_min_doc_count": 3
}
]
}
}
(1) 这个示例中的种子查询是一个更复杂的’midi’查询,带有日期过滤器.
(2) use_significance 默认为true,用于将关联的term筛选为只与我们的查询显著相关的term.significant_terms aggregation文档中解释了用于计算重要性的算法.
(3) 每个’hop’考虑每个shard上最佳匹配文档的示例(默认为100个文档).使用此示例具有双重好处,勘探集中于有意义的连接term并提高执行速度.非常小的值(小于50)可能不能提供足够的证据来确定term之间的联系,而非常大的值可能会稀释质量并且速度慢.
(4) timeout设置(毫秒表示)之后,将停止搜索并返回迄今为止收集的结果.这是一种有效的终止方法,因此如果在为字段加载fielddata时遇到长时间的暂停,可能会出现超限.
(5) 为了避免顶部匹配的文档样本被单个结果源所控制,有时需要在样本中请求多样性。这是通过选择一个单值字段和该字段中每个值的最大文档数量来实现的。在这个示例中,我们要求商店中任何一个部门的单击文档不超过500个。这可能有助于我们考虑电子、图书和视频部门的产品,而如果没有这种多样化,我们的结果可能完全由电子部门主导。
(6) 我们可以使用size属性控制每个字段返回的vertices term的最大数量(默认为5)
(7) min_doc_count充当一个确定性阈值——在我们认为这是一个有用的connections之前,有多少文档必须包含一对term?(默认值是3)
(8) shard_min_doc_count是一个高级设置——一个碎片上有多少文档必须包含一对term才能返回全局考虑?(默认是2)
(9) 可选地,“引导查询”可用于指导图形API探索已连接的term。在这种情况下,我们通过只考虑最近记录的点击文档来引导从产品到相关查询的跳转。
‘Spidering’ operations
在最初的搜索之后,用户通常希望使用图形可视化工具(如kibana graph插件中的工具)来查看结果,用户通常会选择一个或多个感兴趣的vertices,并请求加载与当前选择相连接的更多vertices.在图形语言中,这种操作通常称为’spidering’或’spidering out’.
为了找出相关联的vertices,通常需要定义两件事情:
- 你要从中抓取一个vertex
- 对于已经出现的vertices,您希望避免在结果中再次看到这些vertices
这两条信息传递给Graph api时将确保返回新的vertices,这些vertices可以附加到现有的图中.举个请求例子:
POST clicklogs/_graph/explore
{
"vertices": [
{
"field": "product",
"include": [ "1854873" ] (1)
}
],
"connections": {
"vertices": [
{
"field": "query.raw",
"exclude": [ (2)
"midi keyboard",
"midi",
"synth"
]
}
]
}
}
(1) 在这里,我们列出了使用感兴趣的terms的include数组(在本例中是单个产品代码)来spider的强制起点.注意:因为这里有一个include子句,所有不需要定义’种子’查询-我们隐式地查询包含include子句中列出的任何term的文档.与其在这个数组中传递普通字符串,还可以传递带有term和boost值的对象,以在特定条件下提升匹配.
(2) exclude避免返回特定的term.在这里,我们要求通过客户点击product 1854873出现更多的搜索,但明确排除客户已经知道的搜索词.
include 和 exclude 子句提供了一些基本特性, 使客户机能够逐步在工作区构建相关信息的图.
include子句用于定义用户从哪些起点进行spider,include子句还可以用来限制用户希望访问的端点,从而’填充’客户端工作区中现有vertices之间的一些缺失连接.exclude子句可以避免返回工作区中已经存在的vertices,或者排除客户不想看的vertices
官网: https://www.elastic.co/guide/en/graph/current/graph-api-rest.html#spider-search