SOLR字段查询跳过记录如果..语句
我在solr中有很多产品,都有一个field_代码和一个field_库存,我想用field query排除这样的记录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\
-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,则不设置。