【问题标题】:How to OR null value in Apache Solr query?如何在 Apache Solr 查询中 OR 空值?
【发布时间】:2011-10-06 09:09:23
【问题描述】:

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

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

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

这里有一些信息:

查询: (name: john) --> Result count: 15383 //Johns

查询: (name: {* TO *}) --> Result count: 61013 //有名字的人

查询: -(name: {* TO *}) --> Result count: 216888 //没有名字的人

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

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

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

任何帮助将不胜感激。

【问题讨论】:

    标签: solr sql-null


    【解决方案1】:

    (-name:[* TO *] AND *:*) OR name:john

    【讨论】:

    • 这正是我所需要的。谢谢。你能解释一下AND *:* 在这个例子中做了什么吗?我发现如果我把那部分排除在外,我的搜索将不起作用,我只是不确定为什么。
    • *:* 表示所有行。 *:* -name:* 表示所有没有名称值的行。 name:john OR (*:* -name:*) 可以翻译成 SQL 为 name='john' OR name IS NULL
    【解决方案2】:

    您也可以这样使用它。

    &fq=name:john OR !name:['' TO *]
    

    【讨论】:

      【解决方案3】:

      您可以使用下面来获取 null 和 rest 的结果

      -name:[* TO *] OR *:*
      

      【讨论】:

        【解决方案4】:

        试试下面的查询 -

        q=(name:john OR -(name:[* TO *]))
        

        【讨论】:

        • 我在link找到了解决方案
        • -(-(name:john)+(name:{* TO *}))
        猜你喜欢
        • 2011-11-27
        • 1970-01-01
        • 2013-06-30
        • 2014-05-11
        • 1970-01-01
        • 2010-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多