如何记录或打印被调用的 python elasticsearch-dsl 查询

Posted

技术标签:

【中文标题】如何记录或打印被调用的 python elasticsearch-dsl 查询【英文标题】:how to log or print python elasticsearch-dsl query that gets invoked 【发布时间】:2016-01-29 09:16:23 【问题描述】:

我正在为我的 python 应用程序使用elasticsearch-dsl 来查询弹性搜索。

为了调试 elasticsearch-dsl 库实际生成的查询,我无法记录或打印发送到 elasticsearch 的最终查询。

例如,喜欢看到这样发送到elasticsearch的请求正文:


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

尝试将 elasticsearch 日志级别设置为 TRACE。即使这样,也无法看到已执行的查询。

【问题讨论】:

【参考方案1】:

看看我的博文here,“索引级别的慢日志设置”部分。基本上,您可以使用 slowlog 在 Elasticsearch 生成的单独日志文件中打印查询。我建议使用非常低的阈值来查看所有查询。

例如,对于特定索引,类似这样:

PUT /test_index/_settings

  "index": 
    "search.slowlog.level": "trace",
    "search.slowlog.threshold.query.trace": "1ms"
  

或者

PUT /_settings

  "index": 
    "search.slowlog.level": "trace",
    "search.slowlog.threshold.query.trace": "1ms"
  

作为集群范围的设置,适用于所有索引。

查询将记录在您的/logs 位置,一个名为[CLUSTER_NAME]_index_search_slowlog.log 的文件。

【讨论】:

感谢安德烈的回答。这满足了我目前的调试需求。, 谢谢 - 这有帮助。供其他人参考,还有一些补充想法here 我想知道如何关闭慢日志。 “-1”不起作用

以上是关于如何记录或打印被调用的 python elasticsearch-dsl 查询的主要内容,如果未能解决你的问题,请参考以下文章

python异常处理

Django:显示/记录来自 python shell 的 ORM sql 调用

如何使用 Python 在日志文件中复制/捕获标准输出

python语言如何使用print()打印当前行

如何在 python 中打印 csv 文件中的记录总数?

打印出 C 中 Dbus 方法调用的响应