2016-06-13 101 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, 
], 
];