如何打印Java代码调用MarkLogic时实际发送的搜索查询语句?
查看MarkLogic接收的实际搜索查询语句
没问题,你的需求完全合理——想要确认Java代码发送给MarkLogic的实际查询内容,有几个简单实用的方法:
方法1:直接在代码中打印查询XML
MarkLogic的StructuredQueryDefinition自带了toXML()方法,能直接把构建好的查询转换成MarkLogic接收的XML格式,这就是实际发送的查询语句。你只需要在代码中添加一行打印逻辑即可:
QueryManager queryManager = client.newQueryManager(); StructuredQueryBuilder builder = queryManager.newStructuredQueryBuilder(); StructuredQueryDefinition definition = builder.and( builder.value(builder.element("filterField"), "abc"), builder.range(builder.element("filterName"), "xs:string", Operator.EQ, "newfilter") ); definition.setCollections(BaseDataConstants.FILTER_COLLECTIONS); // 打印实际发送给MarkLogic的查询XML System.out.println(definition.toXML()); SearchHandle searchHandle = new SearchHandle(); queryManager.search(definition, searchHandle);
运行这段代码后,控制台会输出类似这样的XML(这就是ML收到的查询):
<search:query xmlns:search="http://marklogic.com/appservices/search"> <search:and-query> <search:value-query> <search:element name="filterField"/> <search:text>abc</search:text> </search:value-query> <search:range-query type="xs:string"> <search:element name="filterName"/> <search:value operator="eq">newfilter</search:value> </search:range-query> </search:and-query> <search:collection>your-collection-name</search:collection> </search:query>
方法2:启用MarkLogic服务器端查询日志
如果想从服务器端验证收到的查询,可以开启MarkLogic的查询日志:
- 登录MarkLogic管理控制台(Admin UI)
- 定位到你使用的数据库,切换到「Logs」标签页
- 找到「Query Logging」选项,设置日志级别为
debug或更详细的级别 - 保存设置后,MarkLogic会把接收到的所有查询记录到日志文件中(默认路径是
MarkLogic/Logs/QueryLog.txt)
方法3:抓包查看完整HTTP请求(可选)
如果需要查看包含HTTP头在内的完整请求内容,可以用WireShark这类抓包工具捕获客户端与MarkLogic服务器之间的通信。不过这个方法相对繁琐,一般前两种方法就足够满足需求了。
内容的提问来源于stack exchange,提问作者marklogic_coder
相关产品推荐
相关产品推荐

