我有一个带有近2G文档的碎片。 我试图理解查询的效率如何,其结果集包括大多数文档,但它包括排序和限制 在SQL数据库中,数据库可以使用sorted和limit子句根据排序的字段索引仅检查非常少量的行 Lucene / Solr也这样做吗?
preg_match('/.any_string./',$sFileName)
答案 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/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相媲美。试试吧,看看。