1

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

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

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

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

4

3 回答 3

3
  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 好得多,而与 indexed-RDB 几乎相同。其次,当通配符查询是前缀查询时,indexed-RDB 和 Lucene 在利用索引的情况下仍然表现得非常好。 RDB与组合搜索条件和索引字段数有关。如果组合条件中的某些字段没有被索引,搜索将花费更多时间。第四,Lucene和unindexed-RDB的查询时间与记录复杂度有关系,而indexed-RDB几乎与它无关。

简而言之,如果您正在执行诸如“select * where x = y”之类的搜索,那么您使用哪个并不重要。您在 (x = y OR (x = z AND y = x)...) 中添加的子句越多,Lucene 就越好。

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

于 2010-10-18T14:30:18.457 回答
1

我建议您阅读Marc Krellenstein 的“全文搜索引擎与 DBMS”。

开始使用 Lucene 的一个相对简单的方法是尝试Solr。您可以使用复制和分片来扩展 Lucene 和 Solr 。

于 2010-10-18T11:41:50.053 回答
0

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

于 2010-10-18T11:06:16.790 回答