eland icon indicating copy to clipboard operation
eland copied to clipboard

Improve `es_info` method output readability

Open leonardbinet opened this issue 4 years ago • 5 comments

In my case, es_info method output readability is not optimal:

  • tabulation breaks if screen width is too small (screenshot below), a possibility might be return an object declaring a _repr_html_ method to have nice display in notebook environment
  • since es_info is probably only useful in interactive environment, it might be relevant to directly print output instead of returning a string
Capture d’écran 2020-07-16 à 20 10 23

leonardbinet avatar Jul 16 '20 18:07 leonardbinet

I'm wondering if it makes sense to have es_info display things more vertically rather than horizontally. There'd be a lot of output but at least you'd be able to see it all from a Jupyter Notebook. Something like:

es_index_pattern: ecommerce
Index:
 es_index_field: _id
 is_source_field: False
Operations:
  tasks: [('boolean_filter': ('boolean_filter': {'range': {'taxful_total_price': {'gt': 100.0}}})), ('head': ('sort_field': '_doc', 'count': 10))]
  size: 10
  sort_params: _doc:asc
  _source: [
    'taxful_total_price',
    'category',
  ]
  body: {
    "query": {
      "range": {
        "taxful_total_price": {
          "gt": 100.0
        }
      }
    }
  }
  post_processing: []
Mappings:
  taxful_total_price:
    aggregatable_es_field_name: 'taxful_total_price'
    es_date_format: None
    es_dtype: 'float'
    es_field_name: 'taxful_total_price'
    is_aggregatable: True
    is_scripted: False
    is_searchable: True
    is_source: True
    pd_dtype: 'float64'
  category:
    aggregatable_es_field_name: 'category.keyword'
    es_date_format: None
    es_dtype: 'text'
    es_field_name: 'category'
    is_aggregatable: False
    is_scripted: False
    is_searchable: True
    is_source: True
    pd_dtype: 'object'
...

Obviously there'd be a long tail for mappings on wide indices but hopefully there wouldn't be cutoff at least?

sethmlarson avatar Jul 16 '20 19:07 sethmlarson

@sethmlarson I prefer as well a solution that avoids cutoffs, even if it means a longer output. An additional improvement could be a html table in notebooks by implementing _repr_html_ method: it would avoid cutoff by providing horizontal scroll + would keep a compact output.

Would it makes sense in your opinion to "split" es_info in multiple methods? For instance es_mappings, es_operations etc ?

leonardbinet avatar Jul 16 '20 20:07 leonardbinet

@sethmlarson I will try to do this by adding repr_html method for Ipython readability. Is any formatting is required for console output?

V1NAY8 avatar Sep 30 '20 16:09 V1NAY8

I'd suggest having es_info method returning some EsInfo object, which consolidates all this useful information. As far as I understand, it's the only place where I can quickly get ES query, right? So having EsInfo object would allow accessing some specific parts like query, index, mapping etc as well as printing everything using __repr__ / __str__ methods.

NickolayVasilishin avatar Aug 09 '21 20:08 NickolayVasilishin

@NickolayVasilishin Agreed! Having an object is definitely preferred.

sethmlarson avatar Aug 09 '21 20:08 sethmlarson