Solr分面搜索【键、标记、排除与多选分面】

一.键

所有的分面都有名称,方便开发者进行识别。默认情况下,字段分面与区间分面的分面名称就是字段名,查询分面的分面名称是基于分面值和计算的查询本身。使用键这个局部参数可以方便地对分面进行重命名。如下:
Solr分面搜索【键、标记、排除与多选分面】
通过明确指定key值对分面进行重命名:
Solr分面搜索【键、标记、排除与多选分面】
分面重命名适合于很多应用场景。它允许搜索应用请求查询分面,例如,在后置处理阶段不需要搜索应用对结果集的查询进行解析。它还能为分面赋予用户易于理解的名称,不管分面的底层字段与查询怎么样,都可以让搜索界面上的结果显示更加直观。此外,每个分面的名称是唯一的,通过键的指定,在相同字段上可以定义不止一个分面,返回的每个分面都有唯一的名称。

二.标记、排除和多选分面

在Solr查询请求中使用过滤器,搜索结果必然会包含每个过滤器。默认情况下,分面也要这样处理。但是,这里有一个问题,我们经常需要查看已经被查询排除在外的搜索结果的分面计数。让用户每次在一个分面上只搜索一个值,这样做是不明智的。
所幸,Solr提供分面排除功能来解决这一问题。分面排除可以添加被搜索请求中任何过滤器过滤掉的文档。将过滤掉的文档数计入分面数,这样就可以对每个分进行有效计数,同时忽略该分面上已使用的过滤器。tag与ex是实现这一方法的两个必要局部参数。
Solr分面搜索【键、标记、排除与多选分面】
就查询机制而言,tagForState作用于加州的过滤器,实现的语法为fq={!tag=“tagForState”}state:California。当请求州分面时,排除所有标记为tagForState的过滤器,实现的语法为facet.field={!ex=tagForState}state。
由于查询中使用了这个过滤器,所以即使州分面没有受到该过滤器的限制,但Solr返回的文档仍然会限制在加州。出于同样的原因,没有标记为tagForState的其它所有分面也受限于加州这个过滤器。
如果使用排除标记,语法上可能会显得冗余,但不会对返回的搜索结果造成负面影响。