我有一个Solr索引,其中包含一组以Location
类型存储的坐标;我想查询具有非空值的文档。
在Location字段上执行非空检查的查询语法是什么?
我有一个Solr索引,其中包含一组以Location
类型存储的坐标;我想查询具有非空值的文档。
在Location字段上执行非空检查的查询语法是什么?
最标准的方式是这样的:
fieldName:[* TO *]
像Paige Cook建议的那样在左侧使用''
也可能有效,但我不太信任它,就像我对上面所做的那样。由于这是针对位置字段的,您可能需要针对其中两个基础实际字段之一执行此操作,而不是针对此逻辑组合字段执行此操作。它们以fieldName
开头,并以某种数字后缀结尾;请查看模式浏览器以查看实际名称。
在这里要注意的一个重要事项是,Solr执行此类查询非常昂贵,因为它必须对该字段进行完整的索引扫描。如果您有许多不同的位置字段值(成千上万?),那么这是一件大事。如果您在过滤查询中执行此操作,则它将被缓存,这或许是无意义的。如果您希望此查询运行快速,则应在索引时间索引一个布尔字段以指示是否存在此字段中的值。
''
进行比较会导致 NumberFormatException 异常。 - STW对于位置字段(solr.LatLonType),请使用以下过滤查询:-fieldName:[-90,-180 TO 90,180]
(此范围之外的坐标仍然无效)
尝试这个 q= !fieldname:NULL
这将等同于 Fieldvalue
不是 NULL。
由 STW 提问 我有一个 Solr 索引,其中包含存储为 Location 类型的一组坐标;我想查询该字段具有非空值的文档。
如何查询语法执行 Location 字段上的 NOT NULL 检查?
!fieldname:NULL
不起作用,显示错误 400: java.text.ParseException: 缺少括号:NULL。 - Murz
field_0_coord:[* TO *] AND field_1_coord:[* TO *]
)。感谢您的性能提示! - STWfield:[* TO *]
是否等同于field:*
。我认为它们在2020年1月是相同的。 - David Smileyfield:[* TO *]
是否等同于field:*
。我认为它们在2020年1月之前是相同的。 - David Smiley