Solr分面搜索及可视化【查询分面、区间分面】

时间:2024-04-12 13:07:08

一.查询分面

对任意索引字段使用分面返回最靠前的值,在任意子查询上使用这种做法也很有用,这样就可以知道未来的搜索可能匹配出多少结果,并基于该数字提供相应的分析。
当需要根据不同的搜索条件进行分别搜索统计时,简单粗暴的方式是分别执行多个搜索。例如,如果想对美国餐馆的分布情况进行统计时,需要分别执行以下查询:
Solr分面搜索及可视化【查询分面、区间分面】
一系列的查询,根据条件的不同,可能要执行多次查询:
Solr分面搜索及可视化【查询分面、区间分面】
Solr子查询对搜索结果计数是最简单粗暴的方式,虽然这种方式没有操作的不便之处,但这样做完全没有必要。下面展示如何使用查询分面轻松实现将多个子查询组合起来:
Solr分面搜索及可视化【查询分面、区间分面】
正如你所见,多个子查询通过查询分面可以组合成一个Solr请求。上面的例子基于分类数据的,但有些数据是连续性的,比如价格,这里的价格区间并不是均匀间隔的,如下:
Solr分面搜索及可视化【查询分面、区间分面】

二.区间分面

顾名思义,区间分面将数值和日期字段值分成一些区间段,以便Solr返回各个区间以及他们包含的文档数。创建多个不同的查询分面来表示多个区间值的做法,可以用区间分面很好地代替。
类似上面的多个区间值查询创建的查询分面,区间分面搜索引擎返回的值均匀分布,类似的分面计数通过Solr的区间分面返回,如下:
Solr分面搜索及可视化【查询分面、区间分面】
区间分面返回了查询落在facet.range.start和facet.range.end两个参数间的每个区间段的统计数,有些不包含文档的区间也被返回了。其次,与查询分面不同,根据facet.range.gap参数设置,区间分面的区间间隔是相同的。根据应用需求可以调整间隔,以创建更大或更小的区间段。返回所以区间段的做法会节省大量时间,因为不必设置许多facet.query参数就可以实现类似的效果。
区间分面还有其他一些参数可以选择,包括facet.range.hardend,facet.range.other和facet.range.include。详情如下:
Solr分面搜索及可视化【查询分面、区间分面】
以及:
Solr分面搜索及可视化【查询分面、区间分面】