SQL中WHERE 1=0的Solr等价写法是什么?相关fq参数是否有效?
Solr中类似SQL WHERE 1=0的等价写法及过滤条件疑问解答
有没有SQL
WHERE 1=0的等价写法?
有,最简洁可靠的写法是用fq=-*:*(过滤查询)或者q=-*:*(主查询),直接排除所有文档,返回空结果集。也可以用矛盾的范围查询(比如fq=id:[* TO *] -id:[* TO *])实现,但前者更高效直观。fq=-id:[* TO *]能否确保返回空结果集?
大部分场景下可以,但有前提:你的索引中所有文档都包含id字段。id是Solr默认核心的必填主键字段,正常情况下所有文档都会有,此时该写法会排除所有文档。但如果存在未定义id字段的文档(这种情况极少,通常是自定义schema移除了id的必填约束才会出现),这类文档不会被过滤掉,所以更稳妥的写法是fq=-*:*。fq=*:*是否等同于无过滤条件?
效果上在绝大多数场景下一致,但严格来说有细微区别:fq=*:*会触发Solr的过滤缓存,而不加fq参数不会,这会带来性能层面的差异;- 逻辑上
*:*匹配所有存在至少一个字段的文档(Solr不允许空文档被索引),而无过滤条件时,Solr直接返回符合主查询q的结果。如果主查询q默认是*:*,两者返回结果完全相同。
内容的提问来源于stack exchange,提问作者pursuitoferudition
相关产品推荐
相关产品推荐

