从SearchQuery对象获取字符串查询(JSON)

从SearchQuery对象获取字符串查询(JSON),
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,出于调试目的,我需要知道elasticsearch向elasticsearch集群发送的是什么查询spring数据。我试图调用SearchQuery对象上的toString方法,但没有返回我需要的内容 我在Java中所做的(使用spring data elasticsearch)是: 我希望返回类似于ES cluster REST API中执行的普通查询返回的内容: { "query": { "filtered": { "filter": {

出于调试目的,我需要知道elasticsearch向elasticsearch集群发送的是什么查询spring数据。我试图调用
SearchQuery
对象上的
toString
方法,但没有返回我需要的内容

我在Java中所做的(使用spring data elasticsearch)是:

我希望返回类似于ES cluster REST API中执行的普通查询返回的内容:

{
    "query": {
        "filtered": {
            "filter": {
                "or": [
                    {
                        "term": {
                            "yaddayaddayadda.id": "9"
                        }
                    },
                    {
                        "term": {
                            "blahblahblah.id": "9"
                        }
                    }
                ]
            }
        }
    }
}

提前谢谢

实现这一点的一种方法是将ES/服务器端的查询记录到slowlog文件中。打开
elasticsearch.yml
config文件,在底部取消注释/编辑以下两行:

...
index.search.slowlog.threshold.query.info: 1ms
...
index.search.slowlog.threshold.fetch.info: 1ms
...

此解决方案的优点是,无论您使用何种客户端技术来查询ES服务器(Spring数据、Ruby、浏览器、Javascript等),您都可以在单个位置转储和调试查询。

SearchQuery接口有一个方法getQuery()和getFilter()来获取所需信息

        System.out.println(searchQuery.getQuery());
        System.out.println(searchQuery.getFilter());

希望这有帮助。

当使用
SearchRequest
SearchSourceBuilder
时,在其实例上调用
.toString()
方法将获得实际的JSON查询:

SearchRequest searchRequest = new SearchRequest("index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

// building the query
// ...

searchSourceBuilder.query(query);
searchRequest.source(searchSourceBuilder);

System.out.println(searchSourceBuilder.toString()); // prints json query
System.out.println(searchRequest.toString()); // prints json query + other information

我尝试了这个方法,但这不是一个最佳的解决方案,因为我得到的查询在日志中被转换成二进制形式。因此,我在日志中的查询看起来像:
{“from”:0,“size”:20,“query_binary”:“eyaicxvlcnkioib7icjxdwyyev9zdhjpbmciidogeyaizmlbgrziia6ifsicg9yde5hbwuilcailcai291bnryeu5hbwuixswginf1zj5ijoikmuqin19lcaic29ydcigoibeyicg9ydgvyijogikqyigfx1dfq=”
。虽然当我运行这个查询时,我得到了相同的结果,但无法调试。
SearchRequest searchRequest = new SearchRequest("index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

// building the query
// ...

searchSourceBuilder.query(query);
searchRequest.source(searchSourceBuilder);

System.out.println(searchSourceBuilder.toString()); // prints json query
System.out.println(searchRequest.toString()); // prints json query + other information