2014-09-04 63 views
0

我想搜索角色「mapreduce-datanode」&「mapreduce-namenode」的節點。如何廚師搜索角色或

,所以我嘗試以下操作:

hadoop_nodes = search(:node, "role:mapreduce-datanode OR role:mapreduce-namenode AND chef_environment:#{node.chef_environment} AND domain:#{node['domain']}") 

是做這個正確的方式?

謝謝。

+0

你應該將OR(與()(因爲它通常具有較少的優先級)組合在一起,這裏您匹配'role:mapreduce-datanode'或其他條件,我會使用'「(role:mapreduce-datanode或role:mapreduce-namenode) AND ...'(警告:未經測試) – Tensibai 2014-09-04 16:02:57

+0

@Tensibai謝謝 – roy 2014-09-04 16:22:53

回答

1

如果你想"mapreduce-datanode" & "mapreduce-namenode",正如你所說,那麼爲什麼你使用OR?

如果你真的想要一個AND,然後你想:

hadoop_nodes = search(:node, "role:mapreduce-datanode AND role:mapreduce-namenode AND chef_environment:#{node.chef_environment} AND domain:#{node['domain']}") 

如果你希望兩個集合的並集(即你真的平均OR),那麼試試這個:

hadoop_nodes = search(:node, "(role:mapreduce-datanode OR role:mapreduce-namenode) AND chef_environment:#{node.chef_environment} AND domain:#{node['domain']}")