我想在Solr中的文本字段上执行搜索.我想返回范围内或没有值的所有匹配.这两个搜索词是独立的:
myfield:[start TO finish]
-myfield:[* TO *]
Run Code Online (Sandbox Code Playgroud)
第一个返回范围内的所有匹配项.第二个返回所有没有"myfield"字段值的匹配项. 问题是将这两者结合起来.
这不返回任何匹配项:
myfield:[start TO finish] OR -myfield:[* TO *]
Run Code Online (Sandbox Code Playgroud)
这将返回开始和结束之间的匹配,但不返回空条目:
myfield:[start TO finish] OR (-myfield:[* TO *])
Run Code Online (Sandbox Code Playgroud) 我正在使用Solr/Lucene查询语法中的 - 运算符崩溃到一个奇怪的行为.如果我执行查询
-text AND -text
Run Code Online (Sandbox Code Playgroud)
我得到了所有预期的结果(很多),但如果我加上一些括号
-text AND (-text)
Run Code Online (Sandbox Code Playgroud)
要么
(-text) AND (-text)
Run Code Online (Sandbox Code Playgroud)
然后我根本没有结果.我不明白为什么.你对这种行为有解释吗?
先感谢您.
以下过滤器查询返回零结果(使用*:*作为查询):
-startDate:[* TO *] OR startDate:[* TO NOW/DAY+1DAY]
Run Code Online (Sandbox Code Playgroud)
但如果我只过滤:
-startDate:[* TO *]
Run Code Online (Sandbox Code Playgroud)
我得到3个结果.
如果我只过滤:
startDate:[* TO NOW/DAY+1DAY]
Run Code Online (Sandbox Code Playgroud)
我得到161个结果.
为什么组合的FQ返回零结果?我想要的是过滤器返回任何开始日期为null或开始日期在今天之前的文档.
编辑:
我正在使用Solr 4.2.1.2013.03.26.08.26.55
编辑:
嗯,奇怪的是,听起来有同事建议将括号括在这两个部分:
(-startDate:[* TO *]) OR (startDate:[* TO NOW/DAY+1DAY])
Run Code Online (Sandbox Code Playgroud)
不知怎的,它奏效了.我仍然很好奇为什么会有所作为.希望有人可以解释一下.
谢谢!
我一直在努力用AND和OR运算符形成一个solr字段查询.为什么solr为1和2,3和4查询返回不同的结果,即使所有查询都具有相同的逻辑 -
有谁可以帮我理解solr内部如何执行上述查询?
我在solr中有一个配置文件列表,用一些空字段索引(例如:国家/类别等).
<arr name="country">
<str>185</str>
</arr>
<arr name="category">
<int>38</int>
</arr>
我想搜索没有国家的个人资料.我用过,-country:['' TO *]因为country是一个字符串字段.
现在我该如何检查它是否为整数字段.该字段可能为空(无字段)或值为0.我试过
category:0
Run Code Online (Sandbox Code Playgroud)
但它没有给我正确的输出,在这种情况下输出是空的.