2009-08-27 58 views
29

我想在Solr中的文本字段上执行搜索。我想返回一个范围内或没有价值的所有比赛。这两个搜索词是独立的:在Solr中搜索日期范围或空/无字段

myfield:[start TO finish] 
-myfield:[* TO *] 

第一个返回范围内的所有匹配。第二个返回所有对“myfield”字段没有值的匹配。 问题在于将这两者结合在一起。

这没有返回比赛:

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

这将返回起点和终点之间的匹配,而不是空条目:

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

尝试[this](http://stackoverflow.com/questions/634765/using-or-and-not-in-solr-query/)。 – 2009-08-28 01:45:13

+0

@samkass:同意,Solr应该检测到这一点,并在内部将表达式重写为它可以处理的内容。 – 2013-09-06 18:55:43

+0

有没有人将此文件作为Solr JIRA中的错误进行存档?我没有看到任何理由为什么正逻辑版本不应该工作。 – samkass 2013-09-06 17:53:10

回答

2

我与毛里西奥·雅伯的解决方案达成一致。

如果能帮忙,我改变了我的初始查询:

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的第一个查询没有运行。

4

Mauricio Scheffer的解决方案为我工作,直到我将它包含到完整查询中。查询本身最多可以包含三个带范围的字段,并且Solr中间的某个地方无法处理它。 我设法用一个查询来解决这个问题:

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

它woked即使在我的复杂查询,所以也许这将帮助别人。