我正在研究一个系统,该系统根据字符串和数字范围以及日期范围对大型记录集进行匹配。据我所知,字符串匹配大多是精确匹配,而不是我所理解的lucene通常设计的不太精确的全文搜索类型结果。由于数据涉及价格,因此数字精度很重要。
我注意到Lucene最近添加了一些对数值范围搜索的支持,但它不是最初设计的。
目前,系统使用过程SQL进行匹配,并且就系统的可扩展性达到了限制。我正在研究水平扩展系统的方法,并且使用搜索引擎技术似乎是一种可能性,因为有些技术可以扩展到非常大的数据集,同时执行非常快速的搜索结果。我想研究是否可以通过与lucene生成的元数据匹配来减少数据库的负担,而不会在数据库中查找完整记录,直到匹配规则确定应该检索的内容为止。我想最终的目标是近乎实时的结果,尽管我们距离目前还有很长的路要走。
我的问题如下:对于这种类型的索引和搜索,Lucene可能会比RDBMS更快地执行更多次并扩展到更大的数据集吗?
答案 0 :(得分:3)
首先,执行时 确切的查询,Lucene的表现要好得多 unindexed-RDB的那个,与几乎相同 索引-RDB。其次,当通配符查询是前缀时 查询,然后indexed-RDB和Lucene都表现得很好 还是通过利用指数......第三,对于组合查询,Lucene执行 顺利而且通常花费很少的时间,而查询时间 RDB与组合搜索条件有关 索引字段的数量。如果在某些领域 组合条件尚未编入索引,搜索会 花费更多的时间。第四,Lucene和。的查询时间 unindexed-RDB与记录复杂性有关系, 但索引的RDB几乎与它无关。
简而言之,如果您正在进行“select * where x = y”之类的搜索,那么您使用哪种搜索无关紧要。你添加的条款越多(x = y OR(x = z AND y = x)......)Lucene变得越好。
他们并没有真正提到这一点,但Lucene的一个巨大优势是所有内置功能:词干,查询解析等。
答案 1 :(得分:1)
我建议你阅读Marc Krellenstein's "Full Text Search Engines vs DBMS".
开始使用Lucene的一种相对简单的方法是尝试Solr。您可以scale Lucene and Solr使用复制和分片。
答案 2 :(得分:0)
Lucene的核心和最简单的形式是一个词密度搜索引擎。 Lucene可以扩展以处理极大的数据集,并且在正确索引时以极快的速度返回结果。对于基于文本的搜索,搜索结果很可能会在Lucene中更快地返回,而不是SQL Server / Oracle / My SQL。据说将Lucene与传统的RDBMS进行比较是不公平的,因为它们都有完全不同的用法。