关键字搜索引擎,返回统计信息而非命中

时间:2011-05-25 15:55:58

标签: sql database search indexing lucene

关于StackOverflow的第一篇文章,但我一直把这个网站视为共享知识的重要来源,我很高兴看到这个问题的结果。

我觉得我现在已经达到了SQL索引,统计数据和全文搜索的极限,我正在寻找一个可以为我们提供所需功能的搜索库。我不反对自己编写(如果我能得到老板的批准,也可以开源),但我更愿意找到一些已经存在的开源资源,自然。

我们所追求的是一个搜索引擎,可以提供有关用户搜索特定关键字时匹配的结果的统计信息。比方说,我们说的是我们在谈论在线商店的产品数据库。我们需要能够返回有关有多少产品的统计信息,这些产品与给定的一组关键字匹配(并且还能够按价格,类别等过滤此结果集),以及库存产品总数(假设它存储在产品表的字段中)。我找到的所有搜索引擎都会返回顶部的 n 结果,如果您需要有关结果集大小的统计信息,则需要枚举整个集合。即使你没有,你仍然需要这样做来检索库存产品的总数。

有没有人知道这是否具备此功能?就像我说的那样,我很高兴自己动手,或者自己构建它,或修改像Lucene这样的功能,但是我无法在Google上找到任何合适的东西。

先谢谢你们!

3 个答案:

答案 0 :(得分:3)

您可以查看Solr,这是一个构建在Lucene之上的分面搜索引擎。除了进行全文搜索之外,Solr还会为您计算许多不同的东西。它善于处理结构化和全文数据的组合。

答案 1 :(得分:1)

这里要记住的是“枚举所有结果”可能意味着非常不同的事情 - select count(*)与实际获取每个对象所需的所有连接等非常不同。在Lucene以及关系数据库中都是如此。所以我不担心文档说“我们列举所有结果。”

根据我的经验,Solr的标准分面可以满足99%的人需要。如果你在1%(即你有一个巨大的数据库),那么我可以建议一些猜测结果的方法,这可以更快。但索尔可能会为你工作。

答案 2 :(得分:0)

  

我觉得我现在已经达到了我可以用SQL索引做的限制

你确定吗?我问,因为如果你使用MySQL,你可能想要研究PostgreSQL的full text search功能。特别是当您将它与btree_gintrigram模块结合使用时,以及非常合适的explain功能,可以从高度复杂的查询中提取合理的行估计值。