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