在数据量非常大的情况下,排序不仅影响查询速度,而且占用系统资源。但如果本身存储的数据已经按照某个字段预先排序,检索性能会有明显提升,在大数据量上的对比尤为明显。因此,使用预排序功能够大幅度提升数据检索性能,优化搜索引擎的服务能力。本章节介绍使用预排序功能的操作步骤。
操作步骤
修改solrconfig.xml中的MergePolicy,具体请参见Customizing Merge Policies。
查询时,指定参数segmentTerminateEarly=true即可,请参见以下demo演示:
<mergePolicyFactory class="org.apache.solr.index.SortingMergePolicyFactory"> <str name="sort">timestamp desc</str> <str name="wrapped.prefix">inner</str> <str name="inner.class">org.apache.solr.index.TieredMergePolicyFactory</str> <int name="inner.maxMergeAtOnce">10</int> <int name="inner.segmentsPerTier">10</int> </mergePolicyFactory>
此时插入数据将会按照timestamp字段进行预先倒序排序,执行查询如下:
curl "http://localhost:8983/solr/testcollection/query?q=*:*&sort=timestamp+desc&rows=10&segmentTerminateEarly=true"
参数上加上
segmentTerminateEarly=true
后,显示效果会比没有设置预排序的快很多,尤其排序数据量到达T级别之后,效果更为明显。说明查询时,指定的sort必须与配置的MergePolicy中指定的一致,否则无效。
查询时需要指定segmentTerminateEarly参数,否则会进行全排。
使用了这个预排序返回的结果中,“numFound”是不准确的。
文档内容是否对您有帮助?