如何在Solr中查询特定记录及筛选含/不含date_of_birth字段的记录?
如何用Solr实现带条件的字段存在性筛选?
刚好做过类似的需求,用Solr自带的字段存在性查询语法就能轻松搞定,分两种场景给你拆解:
1. 无筛选条件时,仅显示不含date_of_birth的记录
Solr提供了_missing_查询关键词,专门用来匹配不包含指定字段的文档。
当用户没有指定任何筛选条件时,你可以这么处理:
- 直接调用Solr API的话,请求URL可以写成:
/solr/your_core_name/select?q=_missing_:date_of_birth&wt=json - 如果是在业务代码里对接,只要判断用户没传入自定义查询条件,就自动给Solr请求加上
_missing_:date_of_birth这个查询规则。
这样返回的结果就只会是不含date_of_birth字段的记录(比如你例子里id=55的julie)。
2. 用户需要查看含date_of_birth的记录时,仅显示存在该字段的记录
对应_missing_,Solr还有_exists_关键词,用来匹配包含指定字段的文档。
当用户明确要查看带出生日期的记录时,直接用_exists_查询即可:
- 对应的Solr API请求URL:
/solr/your_core_name/select?q=_exists_:date_of_birth&wt=json - 业务层也可以通过自定义参数(比如
?show_dob=true)来触发这个查询,当参数为true时,就把查询条件替换成_exists_:date_of_birth。
注意事项
- 确保你的Solr Schema里,
date_of_birth字段没有设置required="true",否则所有文档都必须包含这个字段,_missing_查询就不会返回任何结果了。 - 如果需要更灵活的切换,也可以把这两个查询做成Solr的请求处理器,通过不同的请求路径来区分两种查询场景,减少业务层的判断逻辑。
内容的提问来源于stack exchange,提问作者user11262291
相关产品推荐
相关产品推荐

