2015-06-09 63 views
0

操作我运行此查询并返回15个产品用法 - 在elasticsearch

+(+organizationId:6 +(mainGenre:dance alternateGenre:dance) +(state:pending state:published state:accepted)) +(alias:audioProduct) 

所以,这意味着有organizationId = 6(Main_Genre =舞蹈或Alternate_Genre =舞)共15种产品。但是,下面看到的这个查询不会返回任何内容。

+(+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发现的产品。

有没有人有任何想法我在做什么错在这里?

回答

1

(-mainGenre:pop -alternateGenre:pop),而你是后

Main_Genre != pop AND Alternate_Genre != pop

而应该试试这个OR运算符是隐含的,也就是说,它的等效

Main_Genre != pop OR Alternate_Genre != pop

(见&&运营商):

+(+organizationId:6 +(-mainGenre:pop && -alternateGenre:pop) +(state:pending state:published state:accepted)) +(alias:audioProduct) 
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 =弹出!)