Result records in Elasticsearch do not always have all columns
that are defined in an index.
This often happens when multiple document types are stored in the same index.
The first row has columns ["_id", "html", "url"], while the second
misses the "html" column: ["_id", "url"].
Adminer expects that all result rows include all columns.
This leads to the problem that the "url" value in the 2nd example row
was rendered in the "html" column.
This patch fixes this problem by fetching the actual column list first
when all fields are to be shown, and using that field list
as base for all rows.
if (empty($search)) {
return false;
}
+ if ($select == array("*")) {
+ $tableFields = array_keys(fields($table));
+ }
$return = array();
foreach ($search["hits"]["hits"] as $hit) {
$fields[$key] = $key == "_id" ? $hit["_id"] : $hit["_source"][$key];
}
} else {
- $fields = $hit["_source"];
+ foreach ($tableFields as $key) {
+ $fields[$key] = $key == "_id" ? $hit["_id"] : $hit["_source"][$key];
+ }
}
foreach ($fields as $key => $val) {
$row[$key] = (is_array($val) ? json_encode($val) : $val);