相关疑难解决方法(0)

在solr查询中使用OR和NOT

我正在处理类似于以下的solr查询:

((myField:superneat AND myOtherField:somethingElse) OR NOT myField:superneat)
Run Code Online (Sandbox Code Playgroud)

运行此时,不会返回任何结果.使用OR NOT任一侧的标准会返回我期望的结果 - 它们只是不能很好地协同工作.在myField匹配superneat的情况下,我还打算确保将myOtherField设置为somethingElse,但如果myField不是superneat,则将其包含在结果中.

有人能解释为什么solr没有返回这种查询的结果吗?是否应该以某种方式重构查询 - 或者是否有不同的方法可以使用solr来实现所需的结果?

lucene search solr

81
推荐指数
6
解决办法
11万
查看次数

如何在Apache Solr查询中使用OR值?

为我解决这个问题的最后一个选择是问StackOverflow.

我正在尝试创建一个Solr查询来获取在其中一个字段上具有特定值的文档或没有值的文档...

理论上,这个查询应该有效.

以下是一些信息:

查询:(姓名:约翰) - >结果数:15383 //约翰斯

查询:(名称:{*TO*}) - >结果数:61013 //具有名称的人

查询: - (名称:{*TO*}) - >结果数:216888 //没有名字的人

现在,当我在使用OR运算符的同一查询中使用第一个和第三个查询时,我希望得到(216888 + 15383)个结果.但是SOLR给出了15383个结果,只是忽略了第三个查询的效果:

查询: +((name:john)( - (name:{*TO*})))//这是我使用过的查询.

这是Solr的错误还是我在查询中做错了?合并两个查询结果是一个额外的解决方案,但如果我可以使用简单的查询,我不想做额外的代码实现.

任何帮助,将不胜感激.

solr sql-null

12
推荐指数
1
解决办法
1万
查看次数

这个Solr范围过滤器查询有什么问题?

以下过滤器查询返回零结果(使用*:*作为查询):

-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)

不知怎的,它奏效了.我仍然很好奇为什么会有所作为.希望有人可以解释一下.

谢谢!

search solr solr-query-syntax

6
推荐指数
1
解决办法
5831
查看次数

标签 统计

solr ×3

search ×2

lucene ×1

solr-query-syntax ×1

sql-null ×1