我运行此查询,它返回 15 个产品
+(+organizationId:6 +(mainGenre:dance alternateGenre:dance) +(state:pending state:published state:accepted)) +(alias:audioProduct)
因此,这意味着有 15 个organizationId = 6 AND (Main_Genre=Dance 或 Alternate_Genre=Dance) 的产品。但是,下面看到的这个查询不会返回任何内容。
+(+organizationId:6 +(-mainGenre:pop -alternateGenre:pop) +(state:pending state:published state:accepted)) +(alias:audioProduct)
现在查询类似于“organizationId = 6 AND Main_Genre!=Pop AND Alternate_Genre!=Pop”。我认为它应该返回至少 15 个产品。我的意思是它应该返回为 MainGenre:Dance 找到的产品。
有人知道我在这里做错了什么吗?
最佳答案
在(-mainGenre:pop -alternateGenre:pop)
中,隐含了OR运算符,即它相当于
Main_Genre != pop 或 Alternate_Genre != pop
而你所追求的是
Main_Genre != pop AND Alternate_Genre != pop
您应该尝试这样做(请参阅 &&
运算符):
+(+organizationId:6 +(-mainGenre:pop && -alternateGenre:pop) +(state:pending state:published state:accepted)) +(alias:audioProduct)
关于java - Elasticsearch 中 - 运算符的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30731062/