在Elasticsearch中,percolator是什么意思/作用?

84
尽管我已经阅读了Elasticsearch文档以了解percolator是什么,但我仍然难以理解它的含义和在简单术语中的用途。有人可以提供更多细节吗?

4
我会尽力进行翻译:这里,这里。我已经读了四遍 ES 的文档,虽然我确定我知道他们在说什么,但这些文档表达得并不清楚。 - Jonesome Reinstate Monica
最大的问题是:为什么它被称为“渗滤”? - Denziloe
可能被称为“过滤”,因为当您发出过滤查询时,它会通过各种存储的查询进行过滤,并返回匹配的查询。 - Siddhartha
3个回答

121
你通常所做的是索引文档并通过查询获取它们。而珂朵莉允许你索引查询,对索引的查询进行过滤以知道它们匹配哪些文档,这也被称为反向搜索,因为你所做的与你习惯的相反。
珂朵莉有不同的用例,第一个是存储用户兴趣以便在内容到达时将正确的内容发送给正确的用户的任何平台。
例如,用户订阅了特定主题,当该主题的新文章出现时,将向感兴趣的用户发送通知。您可以使用query DSL将用户兴趣表示为elasticsearch查询,并将其注册为文档。每次发行新文章时,无需对其进行索引,即可对其进行过滤,以了解哪些用户对其感兴趣。此时,您知道谁需要接收包含文章链接的通知(但通知的发送并非由elasticsearch完成)。另外一步还可以对内容本身进行索引,但这不是必需的。
请查看这个演示,了解与percolator结合使用时可用的其他用例和其他功能,从elasticsearch 1.0开始。

等价于关系型数据库管理系统的是插入触发器,对吗? - Eugen
1
文档不需要被索引,Percolator就可以正常工作。根据Elastic博客,“对于那些刚接触Percolator的人来说,一个常见的误解是警报是插入文档的副作用,类似于数据库触发器。但事实并非如此。” - Devi
2
我之前也有同样的问题,但是一提到用户兴趣用例,我立刻理解了。谢谢。 - DavidC

24

简单来说,Percolator 的作用如下:

User: 嘿,Percolator!你能帮我什么忙?

Percolator: 嗨,用户!我可以帮助您获取您感兴趣的警报。

User: 太棒了!接下来该怎么做?

Percolator: 请告诉我您的兴趣,以查询形式索引在 Elasticsearch 中。

User: 我已经将所有兴趣都准备好了,并将它们作为查询索引到 Elasticsearch 中。这真的那么简单吗?

Percolator: 是的!就是这么简单!我会监视所有传入的文档,如果与您的任何兴趣(查询)匹配,我会将这些文档发送给您!

User: 太棒了!我只是好奇想知道您是如何确定哪些文档与我的兴趣相匹配的。

Percolator: 这是个好问题!答案很简单!您已将您的兴趣作为查询索引到 Elasticsearch 中了,对吧?我使用它们并针对传入的文档运行所有这些查询(并非全部,但为了简单起见,让我们假设全部)。事实上,这个过程称为 percolation!如果任何文档与您的任何查询匹配,则我会将结果发送给客户端(也可以是您)!


4
至少截至Elasticsearch(ES)6.2版本,这个解释是错误的。感知器本身并不能帮助您获得警报,也不会监视传入的文档。您首先需要在ES中索引感知查询,然后自己去执行感知操作以查看是否有任何文档与感知查询匹配。ES为您针对感知查询执行搜索,但仅限于此。(@javanna也解释了同样的内容。) - arun
我认为这个答案的想法是,在索引新文档时,您会将一个percolators调用添加到您使用的调用中。 - Denziloe

0
在幕后,过滤查询 将会获取你想要过滤的内容(例如你想要通知的新闻文章),Elasticsearch 会创建一个包含该文档的微小内存索引。
你将有一堆已注册的查询(例如每个用户偏好的查询)。最初,Elasticsearch 会预过滤可能匹配的查询,然后运行这些可能的查询。就像 Luwak 以前所做的那样(现在是 Lucene Monitor)。
至少对于警报用例,经验法则是:
  • 有大量的传入文档和少量查询(例如日志警报)?只需在计划间隔内运行查询
  • 有较少的文档和大量查询?然后对这些文档进行过滤查询。
我也看到有人使用过滤器对文档进行标记,但实现自定义索引流程中的某些内容更合乎逻辑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接