【问题标题】:How to do NOT IN query in Solr?如何在 Solr 中进行 NOT IN 查询?
【发布时间】:2012-08-08 00:01:01
【问题描述】:

如何从 Solr 结果集中排除一组文档 ID?本质上类似于

/select?q=tag_id:367 AND NOT id:(306670,302209)

我试过了,它不排除具有这些 id 的文档。

【问题讨论】:

    标签: solr


    【解决方案1】:

    试试这个:

    /select?q=*:*&fq=tag_id:367 AND id:[* TO *] -id:(306670 302209)
    

    这应该允许您构建添加任意数量的 ID,而不必在每次要消除 ID 时添加 -id:302209。反之亦然,您可以将-+ 交换并强制一个值数组也存在。

    【讨论】:

    • 感谢 q=*:* 格式的建议。您建议的那个仍然没有排除 ID 为 306670 和 302209 的文档。但是这个可以:/select?q=*:*&fq=tag_id:367 AND -id:306670 AND -id:302209 本质上,带括号的分组功能对我不起作用。
    • 这可能是因为我添加了逗号,请尝试用空格分隔它们。我也会更新我的代码。
    • 我猜AND id:[* TO *] 是不必要的?
    • 明确查询与/select?q=*:*&fq=+tag_id:367 AND -id:(306670 OR 302209)相同,与/select?q=*:*&fq=+tag_id:367 AND -id:306670 AND -id:302209相同
    • 这非常适合我的情况。另一个单独的帖子建议将约束放在“q”而不是“fq”下不起作用。
    【解决方案2】:

    找到一个解决方案:

    /select?q=tag_id:367&fq=-id:306670 AND -id:302209
    

    不确定这是否是最好的方法!

    【讨论】:

    • 就是这样 - 你也可以这样做 id:-306670 -302209
    • 谢谢确认。但是,替代语法是为我抛出 org.apache.lucene.queryParser.ParseException。
    • 嗯,这可能是因为默认搜索字段未设置为 id
    • 对,id 不是默认搜索字段。
    • 这也可以:/select?q=tag_id:367&fq=-id:(306670 OR 302209)
    猜你喜欢
    • 2011-08-23
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 2023-02-13
    • 2023-01-27
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多