从Solr

时间:2015-10-12 08:03:51

标签: mysql solr batch-processing

我陷入了一个相当棘手的问题。我正在我的网站上实现一项功能,其中,一个人获得符合特定标准的所有结果。匹配标准可以是任何东西。但是,为简单起见,我们将匹配条件称为“年龄”。这意味着,该功能将返回所有学生姓名,数据库(数十万)与年龄与所提供参数“最”匹配的学生返回顶部。
我的方法:
1-我有一个Solr服务器。由于我需要以分页方式实现这一点,因此我需要多次查询Solr(因为我的solr页面大小为10)才能实时找到“近绝对”匹配的学生。这在计算上是非常密集的。这个问题可以归结为从Solr中有效地获取大量的元组
2-我尝试批量处理它(并将solr页面大小增加到100)。当有人使用我的功能时,收到的数据不保证是实时的。此外,为了使其最佳,我需要有数据学习算法,以找出所有用户“最有可能”今天使用我的功能。然后我将优先批处理它们。请记住,用户数量太高,我无法每天为“所有”用户运行此批次。

一方面我想要实时显示结果,我必须在性能上妥协(多次击中Solr,因此稍微不可行),而另一方面,如果我做批处理,我的结果集将不是实时的处理,加上我不能每天都为所有用户做这件事。

有人可以纠正我看似错误的方法吗?

Solr索引是在MySQL db内容上完成的。

2 个答案:

答案 0 :(得分:1)

据我了解,您的用户对100K结果不感兴趣。他们只想要前10名(或前100名或类似的低数字)结果,其中人的年龄最接近您提供的数字。

这听起来像Solr函数查询的情况:https://cwiki.apache.org/confluence/display/solr/Function+Queries。对于年龄示例,这将类似于sort=abs(sub(37, age)) desc, score desc,它将返回年龄最接近37岁的人,并在关系情况下按分数排列优先次序。

答案 1 :(得分:0)

我认为你需要的是使用solr游标,它可以让你通过大型结果集有效地分页Solr cursors or deep paging