SOLR字段查询跳过记录如果..语句

SOLR字段查询跳过记录如果..语句,solr,Solr,我在solr中有很多产品,都有一个field_代码和一个field_库存,我想用field query排除这样的记录 -field_code:(A OR B) OR (-(field_code:C AND field_stock:false) AND -(field_code:D AND field_stock:false)) 因此,所有带有字段_代码A或B的产品 或 应排除所有字段代码为C或D且均未库存的产品 其他的都要退吗 更新: 我在查询中添加了另一个字段,但它不起作用 我有field\

我在solr中有很多产品,都有一个field_代码和一个field_库存,我想用field query排除这样的记录

-field_code:(A OR B) OR (-(field_code:C AND field_stock:false) AND -(field_code:D AND field_stock:false))
因此,所有带有字段_代码A或B的产品

应排除所有字段代码为C或D且均未库存的产品

其他的都要退吗

更新:

我在查询中添加了另一个字段,但它不起作用

我有
field\u code
field\u stock
和新的
field\u类型

我需要从查询中删除所有产品,即:

没有:字段\代码=A或B或C或D 和 字段库存=0(-字段库存:1) 及 字段类型='joe'

比如:

从表中选择*(字段\代码不在(A、B、C、D)中,字段\类型='joe'和字段\股票=0)


所以所有的记录都会被返回,但是上面的呢?有什么意义吗?

当使用否定查询时,您必须从某些内容中减去查询-仅使用否定查询本身不会做任何事情(如果您只有一个没有任何布尔运算符的单一否定查询,则Solr会为前面的所有文档集添加前缀,因为这可能是您的意思)

类似的内容可能与您描述的内容相匹配:

(*:* -field_code:(A OR B)) OR 
(*:* -(field_code:(C OR D) AND field_stock:false))

我假设
field\u code
是多值的,因为
之后的第二项在其他情况下没有意义。

谢谢,将测试2mrw,你能告诉我什么吗:
*:*
是表示索引中所有文档的集合吗?也就是说,
q=*:*
将为你提供所有文档。Matslindh对更新有什么想法?如果你想要匹配所有术语的文档(这是你在描述中写的)
*:*-(字段\代码:(A或B或C或D)和字段\库存:0,字段\类型='joe')
应该提供所有与这些不匹配的文档。但是在SQL示例中,您要求提供所有没有A或B或C或D,但有字段\u stock:0和字段\u type:joe的文档。在这种情况下,您可以使用匹配的术语替换
*:*
字段\u stock:0字段\u type:joe-字段\u code:(A或B或C或D)
MatsLindh,对不起,我的英语不好,我想把一切都说出来,但是所有股票为0、类型为joe、代码为A或B或C或D、股票为非的记录都必须是-field_股票为1,因为如果不是1,则不设置。