Solr / Lucene在带有limit子句的巨大排序查询上的效率如何

时间:2016-07-26 09:04:42

标签: solr lucene full-text-search

我有一个带有近2G文档的碎片。 我试图理解查询的效率如何,其结果集包括大多数文档,但它包括排序和限制 在SQL数据库中,数据库可以使用sorted和limit子句根据排序的字段索引仅检查非常少量的行 Lucene / Solr也这样做吗?

preg_match('/.any_string./',$sFileName)

2 个答案:

答案 0 :(得分:1)

请记住,solr / lucene专注于全文搜索。

所以你的SQL查询实际上不是“搜索”(solars fulltext.search的意思)。这更像是通过排序和限制从数据库中提取数据。

将SQL数据库视为excel-sheet,您可以直接超出每行的列。

没有进入solr的观点,这是一个索引,就像一本书中的内容表。

因此,如果您搜索所有(*),按日期排序(在solr中可能),solr(可能)将通过整个索引,收集时间信息以便对50个文档后的输出进行排序

这将在solr中很好地工作,但我认为从数据库中选择它将更有效。因为传递(和存储)数据正是它(数据库)的设计目的。

在solr中有不同类型的缓存和机制,它们专注于在字段中搜索术语。 solr的重点不在于提供数据的onyl。

如果您真的(仅)需要返回文档,但没有搜索,那么SQL数据库可能比solr更有效。

但是:如果你开始搜索术语的“行”,那么solr / lucene是选择的方式。

答案 1 :(得分:0)

相似但不同。

Solr中的排序在这里讨论: https://cwiki.apache.org/confluence/display/solr/Common+Query+Parameters#CommonQueryParameters-ThesortParameter

限制行数: https://cwiki.apache.org/confluence/display/solr/Common+Query+Parameters#CommonQueryParameters-TherowsParameter

此处讨论日期字段: https://cwiki.apache.org/confluence/display/solr/Working+with+Dates

Solr的TrieDateField使用64位整数(不是字符串)来保存日期,表示自1970年1月1日以来的毫秒数。 https://cwiki.apache.org/confluence/display/solr/Working+with+Dates?focusedCommentId=61338556#comment-61338556

您将查询Solr,在TrieDateField类型的字段上指定排序。 Solr将按此类排序结果,并且响应中的文档数量基于'行'参数。效率可与SQL DB相媲美。试试吧,看看。