1
0
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:
Christian Weiske
2025-02-28 12:45:03 +01:00
committed by Jakub Vrána
parent e993462412
commit fde7d7dde2

View File

@@ -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);