2016-02-10 57 views
1

我正在使用Spark Streaming將HTTP請求聚合到HTTP會話中,並根據會話ID以upsert模式將會話索引到Elasticsearch中。每個會話都包含一個實時計算和更新的機器人分數。 我想將機器人分數傳播到屬於同一個會話的所有HTTP請求。我有一種方法可以對已經索引的HTTP請求進行實時更新嗎?如何使用火花流實時更新elasticsearch文檔?

回答

1

ElasticSearch沒有(當前)支持UPDATE WHERE類型的查詢。

你將不得不在兩個步驟中做到這一點。

  1. 執行查詢以獲得與特定的會話ID
  2. 更新使用部分更新 見https://www.elastic.co/guide/en/elasticsearch/guide/current/partial-updates.html瞭解更多詳情每個文檔比分的所有文件,但套用,像

POST /sessions/1/_update { "doc" : { "score": 22 } }

其中URL中的1是要更新的文檔ID。 _update操作將保留任何現有字段並更新分數(儘管並不是說_update不嚴格地講是真實的,因爲它會使用當前字段值創建一個新文檔並刪除舊文檔,但對於您的情況而言,這是不相關的語義)。

+0

這就是我迄今爲止所做的,仍然沒有適當的方法來對現有索引進行選擇性更新。謝謝 – ZianyD

+0

如果這回答你的問題,你可以把它標記爲答案?順便說一句,要確認,請參閱https://www.elastic.co/guide/en/elasticsearch/reference/current/_updating_documents.html的最後一行「請注意,在撰寫本文時,更新只能在單個文檔上執行在未來,Elasticsearch可以提供在給定查詢條件(如SQL UPDATE-WHERE語句)的情況下更新多個文檔的能力。「 – Amasuriel