how to log or print python elasticsearch-dsl query that gets invoked

丶灬走出姿态 提交于 2019-12-19 09:23:31

问题


I am using elasticsearch-dsl for my python application to query elastic search.

To debug what query is actually getting generated by elasticsearch-dsl library, I am unable to log or print the final query that goes to elasticsearch.

For example, like to see the request body sent to elasticsearch like this :

{
    "query": {
        "query_string": {
           "query": "Dav*",
           "fields": ["name", "short_code"],
           "analyze_wildcard": true
        }
    }
}

Tried to bring the elasticsearch log level to TRACE. Even then, unable to see the queries that got executed.


回答1:


Take a look at my blog post here, "Slowlog settings at index level" section. Basically, you can use slowlog to print in a separate log file Elasticsearch generates, the queries. I suggest using a very low threshold to be able to see all the queries.

For example, something like this, for a specific index:

PUT /test_index/_settings
{
  "index": {
    "search.slowlog.level": "trace",
    "search.slowlog.threshold.query.trace": "1ms"
  }
}

Or

PUT /_settings
{
  "index": {
    "search.slowlog.level": "trace",
    "search.slowlog.threshold.query.trace": "1ms"
  }
}

as a cluster-wide setting, for all the indices.

And the queries will be logged in your /logs location, a file called [CLUSTER_NAME]_index_search_slowlog.log.



来源:https://stackoverflow.com/questions/33410701/how-to-log-or-print-python-elasticsearch-dsl-query-that-gets-invoked

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!