如何使用spark streaming实时更新elasticsearch文档?

时间:2016-02-10 16:14:38

标签: elasticsearch apache-spark spark-streaming

我正在使用Spark Streaming将HTTP请求聚合到HTTP会话中,并根据会话ID以upsert模式将会话索引到Elasticsearch中。每个会话都包含一个实时计算和更新的机器人分数。 我想将机器人分数传播到属于同一会话的所有HTTP请求。我有办法实时对已编入索引的HTTP请求执行此类更新吗?

1 个答案:

答案 0 :(得分:1)

ElasticSearch(目前)不支持UPDATE WHERE类型查询。

您必须分两步完成此操作。

  1. 执行查询以获取具有特定会话ID的所有文档
  2. 使用部分更新使用分数更新每个文档 有关详细信息,请参阅https://www.elastic.co/guide/en/elasticsearch/guide/current/partial-updates.html,但请注意,例如
  3. POST /sessions/1/_update { "doc" : { "score": 22 } }

    URL中的1是您要更新的文档ID。 _update操作将保留任何现有字段并只更新分数(尽管不是_update严格来说不是真的,因为它将使用当前字段值创建一个新文档并删除旧文档,但对于您的情况则不相关语义)。