插入文档时是否可以从过滤器获取响应?

Nor*_*rtl 4 elasticsearch

在搜索允许我在插入数据时触发某些操作的解决方案时,我发现了来自elasticsearch的percolator API.在我发现使用percolator API的所有查询都在使用GET之前,我已阅读了不少页面.

对于插入文档的用例并且想知道哪些与查询匹配的情况,我需要做两个请求吗?从页面中我得到的印象是我必须首先插入文档,然后询问percolator索引是否匹配相同的文档.或者是否有一个查询参数或类似的让弹性搜索包括过滤器响应到我从插入中获得的响应?

jav*_*nna 7

鉴于你的问题,我相信你正在看Beta2中的弹性搜索1.0.这个细节非常重要,因为过滤器已经在1.0中重写,与0.90中可用的相比看起来非常不同.

您通常使用过滤器来注册存储的查询.然后,您可以渗透文档以了解它匹配的查询数量,而无需实际索引.

许多人需要的是索引文档的附加步骤,因此能够在同一请求中同时进行渗透和索引是很好的,这样您就可以索引文档并获取它匹配的查询.在索引时使用所谓的渗透物在0.90中曾经是可能的.它是唯一一个通过重写为1.0删除的功能,以便能够更好地分发已注册的查询并将其扩展.

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

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

  1. 索引文件
  2. 通过id 渗透现有文档,而无需再次发送整个文档

步骤2可以在索引操作返回后立即完成,因为它在内部执行get by id,它实时工作,因此无需等待或刷新索引.