Solr如何构建查询以筛选Location字段为空或NULL的条目?
字段空值/NULL查询语法方案
针对你遇到的多值字段空匹配无效问题,以及Location字段的空值/NULL查询需求,分不同查询场景给出对应语法:
SQL数据库场景
如果是在传统SQL数据库中查询:
- 单值字段(Location为普通字符串):
SELECT * FROM 表名 WHERE Location IS NULL OR Location = ''; - 多值字段(比如PostgreSQL数组类型):
SELECT * FROM 表名 WHERE Location IS NULL OR Location = '{}';
搜索引擎(Solr/Elasticsearch)场景
这类引擎对多值字段的空值匹配有特殊语法,你之前的(allowedChannels_string_mv:'')无效,大概率是没覆盖NULL情况或多值字段的空数组匹配:
- 多值字段(如
allowedChannels_string_mv)空/NULL匹配:
更简洁的写法(排除所有有值的条目,剩余即为空/NULL):(allowedChannels_string_mv:["" TO ""] OR allowedChannels_string_mv:NULL)-allowedChannels_string_mv:[* TO *] - Location字段空/NULL匹配:
- 单值字段:
(Location:"" OR Location:NULL) - 多值字段:
-Location:[* TO *]
- 单值字段:
补充说明
部分搜索引擎中,多值字段的"空"包含两种情况:字段完全不存在(NULL)、字段存在但无任何值(空数组/空字符串),所以需要同时覆盖这两种场景,或者用排除法直接过滤掉所有有值的条目。
内容的提问来源于stack exchange,提问作者Tomás Pizarro
相关产品推荐
相关产品推荐

