1

我有求职者和工作清单。我正在尝试确定哪些候选人有资格获得特定列表。我们已经在 ES 中索引了每个列表。我认为可以做到这一点的两种方法是:

  1. 索引 ES 中的每个候选人,然后根据列表的参数构建查询以搜索/过滤合格的候选人,并将其作为结果返回。
  2. 使用 percolate 功能为每个候选人创建一个 percolate 查询,然后通过针对候选人 percolator 索引运行列表数据来找出哪些候选人匹配。

哪个在规模上(数百万条记录)效率更高、性能更高?不完全理解渗透器是如何实现的(我还没有找到任何实际解释实现的文章),我担心的是使用渗透器,我实际上会为每个列表的每个候选人运行一个查询,这将非常低效。

4

1 回答 1

0

使用 Percolator,您可以在“查询”索引上运行搜索查询。 因此,在您的情况下,Elasticsearch 执行的相对“工作”在两种情况下都是相似的:

C: Number of Candidates CQ: Number of Candidate-Job-Search-Alert-Queries

(根据您的描述,系统中的 C = CQ)

选项 1。索引所有候选人。每次添加新工作时,都要在候选人索引上搜索工作的匹配特征。(搜索C记录)

选项 2.percolator在索引中为每个候选人注册 1 个 Job-Search-Alert-Query 。每次添加新工作时,使用 Percolate API 来识别匹配的 Candidate-Job-Search-Alert-Queries。(搜索CQ查询记录)


从性能/可扩展性的角度来看,更大的担忧是Percolator 需要将整个.percolator索引加载到内存中

从功能的角度来看,Percolator限制了您可能需要的某些查询类型(这将是对选项 1 的投票)。


如果您发现自己处于以下情况CQ << C (例如用户保存的搜索),那么 Percolator 方法更有可能胜过必须查询整个候选索引的情况。

于 2015-11-05T16:38:26.533 回答