Bladeren bron

Flatten Elasticsearch results

Andrew Kane 8 jaren geleden
bovenliggende
commit
f2be1bff3d
1 gewijzigde bestanden met toevoegingen van 8 en 2 verwijderingen
  1. 8 2
      lib/blazer/adapters/elasticsearch_adapter.rb

+ 8 - 2
lib/blazer/adapters/elasticsearch_adapter.rb

@@ -9,8 +9,14 @@ module Blazer
         begin
           response = client.search(body: JSON.parse(statement))
           hits = response["hits"]["hits"]
-          columns = hits.first.try(:keys) || []
-          rows = hits.map { |r| r.values }
+          source_keys = hits.flat_map { |r| r["_source"].keys }.uniq
+          hit_keys = ["_score", "_id", "_index", "_type"]
+          columns = source_keys + hit_keys
+          rows =
+            hits.map do |r|
+              source = r["_source"]
+              source_keys.map { |k| source[k] } + hit_keys.map { |k| r[k] }
+            end
         rescue => e
           error = e.message
         end