mirror of
https://github.com/vrana/adminer.git
synced 2025-08-08 07:36:44 +02:00
Elastic: Properly display sparse result rows
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.
This commit is contained in:
committed by
Jakub Vrána
parent
e993462412
commit
fde7d7dde2
@@ -205,6 +205,9 @@ if (isset($_GET["elastic"])) {
|
||||
if (empty($search)) {
|
||||
return false;
|
||||
}
|
||||
if ($select == array("*")) {
|
||||
$tableFields = array_keys(fields($table));
|
||||
}
|
||||
|
||||
$return = array();
|
||||
foreach ($search["hits"]["hits"] as $hit) {
|
||||
@@ -219,7 +222,9 @@ if (isset($_GET["elastic"])) {
|
||||
$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);
|
||||
|
Reference in New Issue
Block a user