弹性搜索中 - 运算符的用法

时间:2015-06-09 11:44:28

标签: java elasticsearch

我运行此查询并返回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发现的产品。

有谁知道我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

(-mainGenre:pop -alternateGenre:pop)中,隐含了OR运算符,即它等同于

Main_Genre != pop OR Alternate_Genre != pop

而你所追求的是

Main_Genre != pop AND Alternate_Genre != pop

您应该尝试这样做(请参阅&&运算符):

+(+organizationId:6 +(-mainGenre:pop && -alternateGenre:pop) +(state:pending state:published state:accepted)) +(alias:audioProduct)

答案 1 :(得分:0)

AND关系是distributive property*成为AND关系,+成为OR关系,ABC三个属性。<登记/> 然后:A*(B+C) = A*B + A*C

您的陈述意味着:
(organizationId = 6 AND Main_Genre!=舞蹈) OR (organizationId = 6 AND Alternate_Genre!= pop)