elasticsearch_adapter.rb 996 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. module Blazer
  2. module Adapters
  3. class ElasticsearchAdapter < BaseAdapter
  4. def run_statement(statement, comment)
  5. columns = []
  6. rows = []
  7. error = nil
  8. begin
  9. response = client.search(body: JSON.parse(statement))
  10. hits = response["hits"]["hits"]
  11. source_keys = hits.flat_map { |r| r["_source"].keys }.uniq
  12. hit_keys = ["_score", "_id", "_index", "_type"]
  13. columns = source_keys + hit_keys
  14. rows =
  15. hits.map do |r|
  16. source = r["_source"]
  17. source_keys.map { |k| source[k] } + hit_keys.map { |k| r[k] }
  18. end
  19. rescue => e
  20. error = e.message
  21. end
  22. [columns, rows, error]
  23. end
  24. def tables
  25. client.indices.get_aliases.map { |k, v| [k, v["aliases"].keys] }.flatten.uniq.sort
  26. end
  27. protected
  28. def client
  29. @client ||= Elasticsearch::Client.new(url: settings["url"])
  30. end
  31. end
  32. end
  33. end