使用Marklogic java API进行通配符搜索

时间:2017-11-17 09:53:57

标签: java marklogic

以下是供参考的代码段。我有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

1 个答案:

答案 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中运行的代码。希望上述调试选项可以帮助您追踪问题。如果没有,请与我们分享您的查询控制台代码和最终生成的结构化查询(您可以通过上面的调试调用获得)。