2015-06-09 25 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 =彈出!)