能否针对含不同Schema的Solr Alias执行指定字段查询?
针对SolrCloud别名中特定集合执行字段查询的解决方法
你可以通过以下两种方式实现只针对别名里的集合a查询is_a字段,避免报错:
使用路由参数指定目标集合
SolrCloud的别名支持通过route参数限定查询仅在指定集合上执行。直接在查询中添加route=a参数,同时传入针对is_a字段的查询条件即可,示例查询语句:q=is_a:true&route=a这样查询会仅路由到集合a执行,完全不会涉及集合b,自然不会出现“Undefined field: is_a”的错误。
使用查询语法兼容无该字段的集合
如果需要保留对别名下所有集合的查询,但仅在有is_a字段的集合中过滤条件,可以结合_exists_函数和布尔逻辑,同时开启Solr的lenient参数(允许查询中存在未定义字段时不报错)。示例查询:q=(_exists_:is_a AND is_a:true)&lenient=true其中
lenient=true会让Solr忽略集合b中不存在is_a字段的错误,而(_exists_:is_a AND is_a:true)只会匹配集合a中符合条件的文档。如果需要同时返回集合b的所有文档,可以调整为:q=(_exists_:is_a AND is_a:true) OR (*:*)&lenient=true
注意:第一种方法更直接高效,因为它完全跳过了集合b的查询;第二种方法适合需要同时处理多集合但兼容字段差异的场景。
内容的提问来源于stack exchange,提问作者QueryQuasar
相关产品推荐
相关产品推荐

