以下是供参考的代码段。我有3个问题,
1)如何查看以下代码中框架的查询以显示在日志中?在日志中,它显示为垃圾值。
2)触发JAVA API后,我们可以看到Marklogic Logs中传递的查询吗?这可以帮助我们的通配符搜索无法使用必需的参数。
3)"通配符" /"确切"搜索选项无效/通过JAVA API调用返回数据。但是通过查询控制台中的Xquery返回数据。
代码段:
String[] options = new String[]{"case-insensitive"};
// BUILD query
StructuredQueryDefinition query = sqb.and(sqb.value(sqb.jsonProperty(DataConstants.DOMAIN), FragmentScope.DOCUMENTS,options,9.0,Domain.Provider.name()));
query = sqb.and(sqb.value(sqb.jsonProperty(DataConstants.subDomain), FragmentScope.DOCUMENTS,options,9.0,chRequest.getDomain()));
使用精确选项
options = new String []{"exact"};
query = sqb.and(query,sqb.value(sqb.jsonProperty(field.getField()), FragmentScope.DOCUMENTS,options,9.0,field.getFieldValue().get(0)));
使用通配符选项
options = new String []{"wildcarded"};
query = sqb.and(query,sqb.value(sqb.jsonProperty(field.getField()), FragmentScope.DOCUMENTS,options,9.0,field.getFieldValue().get(0)+"*"));
System.out.println("----query>>.-----"+query);
……
……
StructuredQueryBuilder sqb = queryManager.newStructuredQueryBuilder();
StructuredQueryDefinition criteria = getQueryDefinitionCriteria(cashRequest, sqb);
SearchHandle searchHandle = queryManager.search(sqb.and(criteria), new SearchHandle(), pageNumber);
GSONHandle handle = new GSONHandle();
MatchDocumentSummary summaryArr[] = searchHandle.getMatchResults();
System.out.println("summaryArr[] >>> "+summaryArr);
示例日志: ----查询>> .----- com.marklogic.client.query.StructuredQueryBuilder$AndQuery***@247d44b4*** summaryArr []>>> [Lcom.marklogic.client.query.MatchDocumentSummary;的 @ f3e6876 summaryArr [] .length>>> 50
答案 0 :(得分:2)
如何查看以下代码中包含的查询 显示在日志中?
致电<link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div class="container-fluid">
<br/>
<div class="col-sm-10">
<div class="panel with-nav-tabs panel-tab-block">
<div class="panel-heading">
<ul class="nav nav-tabs">
<li class="active">
<a data-toggle="tab" class="" href="#projects-tab">Projects</a>
</li>
<li>
<a data-toggle="tab" id="forum-notification-badge" class="notification-badge" data-notification-badge="1" href="#forum-tab">Forum</a>
</li>
</ul>
</div>
<div class="panel-body">
<div class="tab-content">
<div id="projects-tab" class="tab-pane fade in active">
<div class="row">
<div class="col-sm-12">
<div class="panel with-nav-tabs panel-tab-block">
<h1>
Projects
</h1>
</div>
</div>
</div>
<div class="row">
<div class="spacer-sml"></div>
</div>
<div class="row">
<div class="spacer-sml"></div>
</div>
</div>
<div id="forum-tab" class="tab-pane fade">
<div class="tab-block-content forum-posts">
<div class="">
<div class="col-sm-12">
<h1>
Forum
</h1>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
一旦触发JAVA API,我们可以看到Marklogic日志中传递的查询吗?
见Debugging /search Queries With Logging。还可以考虑使用wireshark之类的网络窥探工具来查看网络通信。您还可以将Java系统属性query.serialize()
设置为com.marklogic.client.okhttp.httplogginginterceptor.level
以查看大多数REST(HTTP)请求&amp; Java STDOUT中的响应。请注意you can't use that with streaming handles(如InputStreamHandle)。幸运的是,你没有在这里使用其中一个。
&#34;通配符&#34; /&#34;确切&#34;搜索选项无效/通过JAVA API调用返回数据。但是通过查询控制台中的Xquery返回数据。
看起来数据已退回,或者您在输出中看不到body
。在任何情况下,我认为你的意思是返回错误的数据。
如果没有更多细节,很难帮助解决问题。我们不知道您的summaryArr[].length >>> 50
方法做了什么。而且我们不知道您在qconsole中运行的代码。希望上述调试选项可以帮助您追踪问题。如果没有,请与我们分享您的查询控制台代码和最终生成的结构化查询(您可以通过上面的调试调用获得)。