Sphinx / Solr / Lucene / Elastic Relevancy

时间:2010-08-16 22:52:11

标签: lucene solr sphinx

我们拥有一个包含超过300万种产品的超大型数据库,需要查询它们以创建搜索结果,并且广告每秒显示数千次。我们一直在研究Sphinx,Solr,Lucene和Elastic作为执行这些持续大规模搜索的选项。

这是我们需要做的。获取关键字并在数据库中运行它们以查找与最接近的产品匹配的产品。我们将使用我们的OWN算法来确定哪些产品与我们的广告目标最相关,但我们知道这些引擎已经拥有自己的相关性算法。

所以,我们的问题是如何有效地在引擎之上使用我们自己的算法。是否可以将它们作为某种模块添加到引擎本身?或者我们是否必须重写引擎的相关性代码?我想我们可以通过执行多个查询从应用程序实现算法,但这实际上会破坏效率。

此外,我们想知道哪种搜索解决方案最适合我们。现在我们倾向于狮身人面像,但我们真的不确定。

另外,你会建议在MySQL上运行这些引擎吗,还是最好在像Cassandra这样的键值存储上运行它们?请记住,有3000万条记录,并且在我们移动时可能会翻倍。

感谢您的回复!

2 个答案:

答案 0 :(得分:3)

我不能给你一个完整的答案,因为我没有使用过所有的产品,但我可以说一些可能有用的东西。

  1. Lucene / Solr使用向量空间模型。我不确定你使用“自己的”算法是什么意思,但是如果它离tf / idf的概念太远(比如使用神经网络)你就会遇到困难它变成了lucene。如果你自己的算法只是意味着你想要比其他术语更重要的某些术语,那将很好。基本上,lucene存储有关术语对文档的重要程度的信息。如果你想重新定义一个术语的重要性,那很容易做到。如果你想摆脱一个术语对文档重要性的整个概念,那将是一种痛苦。
  2. Lucene(因此Solr)以自定义格式存储内容。您不需要使用数据库。 3000万条记录并不是一个非常大的lucene索引(当然,取决于每条记录的大小)。如果您确实想使用数据库,请使用hadoop。
  3. 通常,您需要使用Solr而不是Lucene。
  4. 我发现修改Lucene非常容易。但正如我的第一个要点所说,如果你想使用的算法并非基于某个术语对文档重要性的概念,我认为Lucene不会成为可行的方法。

答案 1 :(得分:1)

我实际上和Solr做了类似的事情。我不能评论细节,但基本上专有的分析/相关性步骤产生了一系列搜索术语和相关的提升,并将它们提供给Solr。我认为这可以通过任何搜索引擎完成(它们都支持某种提升)。

最终归结为您的特定分析需要的内容。