我想在Solr中对文本字段执行搜索。我想返回范围内或没有值的所有匹配。这两个搜索是独立的:
myfield:[start TO finish]
-myfield:[* TO *]
第一个返回范围内的所有匹配项。第二个返回所有没有“myfield”字段值的匹配项。 问题在于将这两者结合起来。
这不会返回匹配项:
myfield:[start TO finish] OR -myfield:[* TO *]
这将返回开始和结束之间的匹配,但不返回空条目:
myfield:[start TO finish] OR (-myfield:[* TO *])
答案 0 :(得分:8)
Mauricio Scheffer的解决方案为我工作,直到我将其纳入完整查询。查询本身最多可包含三个带范围的字段,而Solr中间某处无法处理它。 我设法用下一个查询来解决它:
(myfield:[start TO finish] OR (*:* NOT myfield:[* TO *]))
即使在我的复杂查询中它也会被唤醒,所以它可能会帮助其他人。
答案 1 :(得分:2)
我同意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中按预期运行。