在Solr中搜索日期范围或空/无字段

35

我想在Solr的文本字段上执行搜索。我希望返回所有落在一定范围内或者没有值的匹配项。这两个搜索条件是独立的:

myfield:[start TO finish]
-myfield:[* TO *]
第一个返回范围内的所有匹配项。第二个返回所有没有“myfield”字段值的匹配项。问题在于如何结合这两个条件。
此代码未返回任何匹配项:
myfield:[start TO finish] OR -myfield:[* TO *]

这返回开始和结束之间的匹配项,但不包括空条目:

myfield:[start TO finish] OR (-myfield:[* TO *])

1
尝试使用这个 - Mauricio Scheffer
1
完美,谢谢。为了清晰起见,确切的解决方案是: -(-myfield:[start TO finish] AND myfield:[* TO *]) - Alistair Doulin
有人在Solr JIRA中将此问题报告为错误吗?我看不出为什么正逻辑版本不能工作。 - samkass
@samkass:同意,Solr应该检测到这个问题并在内部将表达式重写为它可以处理的形式。 - Mauricio Scheffer
2个回答

11

Mauricio Scheffer的解决方案对我有用,直到我将其包含在完整查询中。查询本身可能包含最多三个具有范围的字段,并且在中间某处,Solr无法处理它。 我已经成功解决了以下查询:

(myfield:[start TO finish] OR (*:* NOT myfield:[* TO *]))

它甚至在我的复杂查询中也起作用,所以也许会对其他人有所帮助。


3

我同意Mauricio Scheffer的解决方案。

如果有帮助的话,我转换了我的初始查询:

DocSource:"P" OR ( DocSource:"E" AND (MyDate:[NOW TO *] OR -MyDate:[* TO *] ) )

为了

DocSource:"P" OR ( DocSource:"E" AND -( -MyDate:[* TO NOW] AND MyDate:[* TO *] ) )

在Solr 4.1中,第一个查询并未按预期运行。


嘿@sebastien-lorber - 查询是检查MyDate是否在未来或为空,对吧? - Jono

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接