2016-06-13 99 views
1

我试图构建必须在多个方面查询,该阵列是这样的:ElasticSearch匹配查询多个方面PHP

$params = [ 
'body' => [ 
    'query' => [ 
     "bool" => [ 
      "must" => [ 
       "terms" => [ 
        "categories" => [ 
         "Seating", 
        ], 
       ], 
       "terms" => [ 
        "attributes.Color" => [ 
         "Black", 
        ], 
       ] 
      ], 
      "filter" => [ 
       "range" => [ 
        "price" => [ 
         "gte" => 39, 
         "lte" => 2999, 
        ], 
       ], 
      ], 
     ], 
    ], 
    'from' => 0, 
    'size' => 3, 
], 
]; 

这是JSON这样表示:

{ 
"query": { 
    "bool": { 
     "must": { 
      "terms": { 
       "attributes.Color": ["Black"] 
      } 
     }, 
     "filter": { 
      "range": { 
       "price": { 
        "gte": "39", 
        "lte": "2999" 
       } 
      } 
     } 
    } 
}, 
"from": 0, 
"size": 3 
} 

问题是,JSON对象在PHP中被表示为数组,所以如果我为一个数组设置密钥,它将被重写。你有什么想法如何在PHP中创建多个术语查询?

在此先感谢。

+0

为什么不相同组键值?这样的 “术语”=> [ “类别”=> [ “就座” ], “attributes.Color”=> [ “黑” ] ] –

回答

1

您需要添加额外的数组附上所有terms查询

$params = [ 
'body' => [ 
    'query' => [ 
     "bool" => [ 
      "must" => [ 
       [ 
       "terms" => [ 
        "categories" => [ 
         "Seating", 
        ], 
       ] 
       ], 
       [ 
       "terms" => [ 
        "attributes.Color" => [ 
         "Black", 
        ], 
       ] 
       ] 
      ], 
      "filter" => [ 
       "range" => [ 
        "price" => [ 
         "gte" => 39, 
         "lte" => 2999, 
        ], 
       ], 
      ], 
     ], 
    ], 
    'from' => 0, 
    'size' => 3, 
], 
];