【问题标题】:Calling search gurus: Numeric range search performance with Lucene?呼叫搜索专家:Lucene 的数值范围搜索性能?
【发布时间】:2010-10-18 10:52:00
【问题描述】:

我正在开发一个基于字符串和数字范围以及日期范围对大量记录执行匹配的系统。据我所知,字符串匹配大多是精确匹配,而不是我理解 lucene 通常设计用于的不太精确的全文搜索类型结果。由于数据涉及价格,因此数值精度很重要。

我注意到 Lucene 最近添加了一些对数字范围搜索的支持,但这并不是它最初设计的目的。

目前系统使用过程式 SQL 进行匹配,系统的可扩展性已达到极限。我正在研究水平扩展系统的方法,并且使用搜索引擎技术似乎是一种可能性,因为有些技术可以扩展到非常大的数据集,同时执行非常快速的搜索结果。我想调查是否可以通过与 lucene 生成的元数据进行匹配来减轻数据库的大量负载,而无需在数据库中获取完整记录,直到匹配规则确定应该检索什么。我希望最终以接近实时的结果为目标,尽管我们现在还有很长的路要走。

我的问题如下:对于这种类型的索引和搜索,Lucene 的执行速度是否可能比 RDBMS 快很多倍并且扩展到更大的数据集更便宜?

【问题讨论】:

标签: search lucene search-engine finance matching


【解决方案1】:
  1. Lucene 将其数字内容存储为 trie; SQL 实现可能会将其存储为 b-tree 或 r-tree。 Lucene 存储其 trie 的方式和 SQL 使用 R-tree 的方式非常相似,如果您看到巨大的差异,我会感到惊讶(除非您利用了 Solr 的一些可扩展性)。
  2. 作为 Lucene 与 SQL 全文性能的一般性问题,我发现的一个很好的研究是:Jing、Y.、C. Zhang 和 X. Wang。 “Lucene 和关系数据库性能比较的实证研究”。在通信软件和网络中,2009 年。ICCSN'09。国际会议,336-340。 IEEE,2009 年。

首先,在执行时 精确查询,Lucene 的性能比 unindexed-RDB 的,而几乎与 索引-RDB。二、当通配符查询为前缀时 查询,那么 indexed-RDB 和 Lucene 都执行得非常好 仍然通过利用索引... 第三,对于组合查询,Lucene 执行 顺利且通常花费很少的时间,而查询时间 RDB 与组合搜索条件和 索引字段的数量。如果某些字段在 组合条件还没有被索引,搜索将 花费更多的时间。四、Lucene的查询时间和 unindexed-RDB 与记录复杂度有关, 但 indexed-RDB 几乎独立于它。

简而言之,如果您正在执行诸如“select * where x = y”之类的搜索,则使用哪个都没有关系。您在 (x = y OR (x = z AND y = x)...) 中添加的子句越多,Lucene 就会变得越好。

他们并没有真正提到这一点,但 Lucene 的一个巨大优势是所有内置功能:词干提取、查询解析等。

【讨论】:

  • 很好的答案!那真的是光芒万丈。这个问题在某些情况下可能会在数据集上按顺序运行数十条规则,并且它可能能够在这里改进很多。我是一个有抱负的经验主义者,所以我真的很感激这个参考。我还认为,除了一些不错的功能之外,分离索引负载还有一个架构优势。
  • @barrymac:您可能还对philosophyforprogrammers.blogspot.com/2010/09/… 以及其中引用的论文感兴趣。您可以插入一些示例搜索值,看看您的预期性能提升可能是多少(当然,假设您知道当前实施的指标)。
【解决方案2】:

我建议你阅读Marc Krellenstein's "Full Text Search Engines vs DBMS".

开始使用 Lucene 的一个相对简单的方法是尝试 Solr。你可以scale Lucene and Solr 使用复制和分片。

【讨论】:

  • 非常感谢您提供这些有用的链接!
【解决方案3】:

Lucene 的核心和最简单的形式是一个词密度搜索引擎。 Lucene 可以扩展以处理非常大的数据集,并且在正确索引时返回结果是极快的速度。对于基于文本的搜索,与 SQL Server/Oracle/My SQL 相比,搜索结果在 Lucene 中返回的速度可能会更快。话虽如此,将 Lucene 与传统 RDBMS 进行比较是不公平的,因为它们的用法完全不同。

【讨论】:

  • 我正在考虑仅将文本搜索卸载到 lucene,但首先我必须找出有多少负载归因于文本搜索,以证明投资的合理性。我敢肯定这要快得多。除了技术比较之外,我正在考虑将 lucene 添加为一个整体系统优化,而不是一个或多个选项。
  • 我肯定会推荐使用 Lucene 和 RDBMS 的组合,你会对性能感到非常惊讶。
  • 好吧,我实现了一次简单的休眠搜索设置。尽管该特定设置实际上非常有限,但 lucene 在大型数据集上的速度和功能足以让您头晕目眩:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
相关资源
最近更新 更多