【问题标题】:Is it possible to get back a response from the percolator when inserting a document?插入文档时是否可以从过滤器中获取响应?
【发布时间】:2014-01-15 21:18:18
【问题描述】:

在搜索允许我在插入数据时触发某些操作的解决方案时,我从 elasticsearch 中找到了 percolator API。我已经阅读了好几页,直到我认识到所有使用 percolator API 的查询都在使用 GET。

对于插入文档并想知道哪些与查询匹配的用例,我需要执行两个请求吗?从页面中我得到的印象是,我必须先插入文档,然后询问具有相同文档的渗透器索引是否匹配。或者是否有一个查询参数或类似的让elasticsearch将渗透器响应包含到我从插入获得的响应中?

【问题讨论】:

  • 如果您的意思是在索引时进行渗透,则可以使用 0.90 但使用 master (1.0) 中的新渗透器将其删除。删除的原因是它是阻止渗透器在 0.90 中分发的较大部分,因为您需要同一节点中的查询和文档才能使其具有性能。有意义吗?
  • 是的,我的意思是在索引时渗透。如果它可以工作,那就太好了。我对 elasticsearch 的内部了解不够,无法了解如何处理索引以及为什么将渗透器作为文档驻留在其他地方是好的。我刚开始使用elasticsearch,我正在构建一个支持通知的日志集中器。基于匹配的传入事件/日志的含义,我可以启动回调来触发一些东西。我觉得对每个事件执行 2 个请求可能太多了,我需要一个不同的解决方案。

标签: elasticsearch


【解决方案1】:

鉴于您的问题,我相信您正在查看 elasticsearch 1.0,目前在 Beta2 中可用。这个细节很重要,因为渗滤器已在 1.0 中重写,与 0.90 中可用的渗滤器相比,看起来完全不同。

您通常使用过滤器来注册查询,这些查询会被存储。然后,您可以过滤文档以了解它匹配了多少查询,而无需实际对其进行索引。

许多人还需要对文档进行索引的附加步骤,因此能够在同一个请求中同时进行渗透和索引是很好的,这样您就可以对文档进行索引并取回它的查询火柴。这曾经在 0.90 中使用所谓的 percolate while indexing 成为可能。这是在重写为 1.0 时删除的唯一功能,以便能够更好地分发已注册的查询并横向扩展它们。

事实上,对于 0.90,查询存储在保留索引中,称为 _percolator,它始终有 1 个分片,auto_expand_replica 设置为 true。这意味着每个节点都将包含所有查询,因为单个分片将自动复制到所有节点。这背后的主要原因是,当您想要同时索引文档和渗透时,为了以高性能方式执行此操作,您需要确保需要命中的两个分片(查询和数据)是在同一个节点上。如果所有查询都在所有节点上,则可以保证在索引可能的同时渗透并且足够快。但是有一个很大的限制,这就是 percolator 被重写的原因:您可以注册的查询数量是有限的,因为它们将进入单个分片。

在 1.0 中,您可以针对任何索引注册查询,并且它们将在名为 .percolator 的保留类型下注册。然后,您也可以使用查询进行扩展,因为它们位于普通索引中,并且您可以定义分片的数量。缺点是您没有每个节点上的查询的完整副本,因此无法在索引时进行渗透。你可以做的,它是等效的,但由两个请求组成:

  1. 索引文档
  2. percolate the existing document id,无需再次发送整个文档

第 2 步可以在索引操作返回后立即进行,因为它在内部执行按 id 获取,它是实时工作的,因此无需等待或刷新索引。

【讨论】:

  • 感谢您的解释。按索引过滤似乎是最好的主意。这使对数据库的请求数量增加了一倍。但这暂时可以让我有时间想出更好的方法。
  • 好的,现在 ES 是 1.3.2 ——结果是什么?如果这是现在受支持的功能?只是有点困惑。它似乎在说:“这永远不可能,但你可以过滤文档 id”与“是的,该功能即将推出”——为了确定而寻求清晰。
【解决方案2】:

我相信这是不可能的。

来自the documentation..

保存已注册查询存储库的 _percolator 只是 ES 中的另一个索引。

由于percolator 是另一个索引,因此需要使用指向_percolator 作为索引的另一个查询来命中ES。

【讨论】:

  • 我不明白为什么这是不可能的。 percolator 索引与索引相关联,同时被寻址为 /my-index/.percolator。所以我不明白为什么 elasticsearch 不应该能够在与 percolator 关联的索引中的存储时间上使用 percolator 索引。
  • 嗯 - 我想这是设计使然。参考here。您所说的能够进行多索引查询,适用于除 ExplainPercolate API 之外的所有索引。
  • 您说的都是对的,因为我认为您在谈论两个不同版本的弹性搜索。 0.90,当前稳定版本,有一个用于查询的特定索引 (_percolator)。 1.0,在 beta2 中可用,可以在任何索引下注册查询,它使用 .percolator 类型来做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多