如何在Solr7中查询长度超过指定值或缺失句号的字符串
Solr 7 复合字段筛选查询方案
前置基础说明
你已知的不含句号的筛选逻辑正确,fieldname:-*.* 可匹配该字段值不包含.的结果。如果单独使用该筛选,建议补全全匹配前缀避免逻辑异常,完整语句为:q=*:* AND fieldname:-*.*
针对长度超过30个字符的筛选,可使用Solr7原生支持的strlen()函数计算字段字符串长度,配合frange做范围筛选即可,对应查询片段为:{!frange l=31}strlen(fieldname)
注:上述语句中
l=31表示筛选长度大于等于31的结果,即符合超过30字符的要求,fieldname请替换为你实际要筛选的字段名。
复合查询实现
场景1:两个筛选条件同时满足(既要长度超30字符,又不能包含句号)
使用AND拼接两个筛选条件,完整查询参数为:q=fieldname:-*.* AND {!frange l=31}strlen(fieldname)
场景2:两个筛选条件满足任意一个即可(要么长度超30字符,要么不包含句号)
使用OR拼接两个筛选条件,完整查询参数为:q=fieldname:-*.* OR {!frange l=31}strlen(fieldname)
注意事项
- 建议使用未分词的字符串类型字段(例如后缀为
_s的字段)做上述筛选,避免分词后长度计算、符号匹配结果不符合预期 - Solr7默认开启函数查询支持,若
frange或strlen不生效,可检查solrconfig.xml中是否禁用了函数查询相关配置 - 可额外搭配
fl(指定返回字段)、sort(排序规则)、start/rows(分页参数)等常规Solr查询参数使用
内容的提问来源于stack exchange,提问作者blah
相关产品推荐
相关产品推荐

