首页 文章

Sphinx / Solr / Lucene / Elastic Relevancy

提问于
浏览
1

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

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

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

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

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

谢谢你的回复!

2 回答

  • 1

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

    • Lucene / Solr使用向量空间模型 . 我'm not certain what you mean by you'正在使用你的"own"算法,但是如果它离tf / idf的概念太远(比如说,通过使用神经网络),那么你很容易做到 . 如果你想摆脱一个术语's importance to a document, that'的整个概念将会很痛苦 .

    • Lucene(结果是Solr)以自定义格式存储东西 . 您不需要使用数据库 . 3000万条记录并不是一个非常大的lucene索引(当然,取决于每条记录的大小) . 如果您确实想使用数据库,请使用hadoop .

    • 通常,您需要使用Solr而不是Lucene .

    我发现修改Lucene非常容易 . 但正如我的第一个要点所说,如果你想使用的算法并非基于某个术语对文档重要性的概念,我认为Lucene不会成为现实 .

  • 3

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

    最终,它归结为您的特定分析所需 .

相关问题