Solr基于分面值的过滤

一.在分面上使用过滤器

在初级水平时,与向查询中添加额外的过滤器相比,在分面上使用过滤器没那么困难。假设在搜索中返回三个分面,两个字段分面和一个查询分面,初始查询和搜索结果如下:
在这里插入图片描述
根据查询可知:
在这里插入图片描述
搜索获取这个全面查询的可用分面值。在这个例子中,如何根据一个分面值进行过滤:在查询中为每个选中的分面值添加一个过滤器。如下:
在这里插入图片描述
过滤效果如下:
在这里插入图片描述
值得注意的是,这里处理的都是单一值字段的分面。因此,在该分面值上进行过滤,就不会返回与其他分面值匹配的文档。这对单值字段来说是有意义的。如果一个文档只能拥有一个价格或只能出现在一个地方,那么它就不会出现在选择了其他价格分面或州分面的情况。然而,并不是所有的字段都只包含单一值。多值字段的分面如下:
在这里插入图片描述
不要使用并【AND】逻辑来连接每个分面过滤器,使用或【OR】逻辑来连接分面过滤器才是正确有效的使用方法。

二.基于分面值的安全过滤方法

为了处理以空格分隔的短语,大多数Solr开发者会使用引号把 分面的所有词项括起来。因此,查询语法应该是这样的fq=city:“Los Angeles”。
不过,盲目地使用引号把要过滤的词项括起来可能也会遇到问题。如果词项本身就包含引号,那么不做转义处理的话,语法就会报错。因此,如果搜索歌曲集索引,对the “in” crowd这首歌进行分面,就需要使用转义符才能将词项更安全地传递给Solr,正确的过滤器语法为:fq=name:“the “in” crowd”。除了注意引号和转义引号之外,还必须留意在分面的字段上进行的所有文本处理操作。基于字段的文本分析在内容索引与查询两个可以分别定义。因此,如果配置存在匹配失误,这可能说明,尝试过滤的值与分面返回的文档数不一致。
所幸,我们有一个非常简单的解决方法,它能确保分面返回值与随后的过滤器值两者找到准确一致的文档,即使用词项查询解析器。此查询解析器的一个好处在于,它绕过了字段上已定于的文本分析链,直接将词项与Solr索引进行匹配。这样做节省了文本处理时间,并且避免了之前讨论过的引号和转义逻辑等问题。词项查询解析器在Los Angeles上的使用语法为fq={!term}Los Angeles,在歌曲the “in” crowd上的使用语法为fq={!term}the “in” crowd。
对所有分面过滤器使用词项查询解析器的做法存在一个缺点,即它不支持布尔语法。因此,如果要在一个过滤器里组合多个分面值,那么需要使用嵌套查询语法。如下:
在这里插入图片描述
无论使用哪一种方式实现分面过滤器,查询解析过滤器都会让查询速度变得更快一些。如果选择使用第二种方法:嵌套查询语法,由于整个嵌套查询包含在引号中,所以需要在词项中添加转义引号。如果在分面过滤器中使用布尔逻辑,那么这种方式可能会造成一些麻烦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值