那就是关于easticsearch查询逻辑...我需要发送带有这样一个数组的查询:
`"query" => array:2 [▼
"match" => array:2 [▼
"location" => array:2 [▼
"query" => "USA"
],
"match" => array:2 [▼
"car" => array:2 [▼
"query" => "FORD" ]
]
]`
当我们尝试使用相同的密钥生成数组时,问题就出现了:
$rules['query'] = [];
foreach ($field_value_array as $key => $value) {
$match['match'][$key] = [
'query' => $value ];
$rules['query'] = $match;
}
PHP会自动删除它们并只留下最后一个。 array_push函数在这种情况下不起作用。
你是我的最后希望。
答案 0 :(得分:1)
"match"
数组中没有"query"
个密钥。
然后,您遗失[]
到$rules['query'] = $match;
,因此,最后一个值会覆盖前一个值,而您只会获得最后一个值。
最后,您将获得额外的"索引"使用['query' => $value ]
,您可以使用$match['match'][$key]['query'] = $value;
。
您可以尝试这样的事情:
$field_value_array=['location' => 'USA','cars' => 'FORD'];
$rules['query'] = [];
foreach ($field_value_array as $key => $value) {
$match=[]; // reset $match to avoid duplicate keys
$match['match'][$key]['query'] = $value;
$rules['query'][] = $match;
}
print_r($rules);
输出:
Array (
[query] => Array (
[0] => Array (
[match] => Array (
[location] => Array (
[query] => USA
)
)
)
[1] => Array (
[match] => Array (
[cars] => Array (
[query] => FORD
)
)
)
)
)