我有求职者和工作列表。我正在尝试确定哪些候选人符合特定列表的资格。我们已经在ES中编制了每个列表。我看到我能做到的两种方式是:
哪种规模更有效率(数百万条记录)?没有完全理解过滤器是如何实现的(我没有发现任何实际解释实现的文章),我担心的是使用过滤器,我实际上每个列表每个候选者运行一个查询,这将是非常低效的。 / p>
答案 0 :(得分: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 requires the entire .percolator
index to be loaded to memory。
从功能角度来看,您可能需要的Percolator limits certain query types(投票赞成选项1)。
如果您发现自己处于CQ << C
(例如用户保存的搜索)的情况,那么Percolator方法更有可能胜过必须查询整个候选索引。