java - 替换 MarkLogic 中弃用的 KeyValueQueryDefinition 以使用 Query By Example

标签 java marklogic query-by-example marklogic-9

我在 MarkLogic 中保存了一个文档,如下所示:

<?xml  version="1.0" encoding="UTF-8"?>
<user>
  <userName>Vikram</userName>
  <password>password</password>
  <firstName>Vikram</firstName>
  <lastName>Swaminathan</lastName>
  <emailAddress>vikram@gmail.com</emailAddress>
</user>

与不推荐使用的 (KeyValueQueryDefinition) 一起使用的代码如下所示:

    // create a manager for searching
    QueryManager queryMgr = client.newQueryManager();

    KeyValueQueryDefinition query = queryMgr.newKeyValueDefinition();
    query.put(queryMgr.newElementLocator(new QName("emailAddress")),"vikram@gmail.com");

    // create a handle for the search results
    SearchHandle resultsHandle = new SearchHandle();

    // run the search
    queryMgr.search(query, resultsHandle);        

    // Get the list of matching documents in this page of results
    MatchDocumentSummary[] results = resultsHandle.getMatchResults();

    // Iterate over the results
    for (MatchDocumentSummary result: results) {

        // get the list of match locations for this result
        MatchLocation[] locations = result.getMatchLocations();
        System.out.println("Matched "+locations.length+" locations in "+result.getUri()+":");

        // iterate over the match locations
        for (MatchLocation location: locations) {

            // iterate over the snippets at a match location
            for (MatchSnippet snippet : location.getSnippets()) {
                boolean isHighlighted = snippet.isHighlighted();

                if (isHighlighted)
                    System.out.print("[");
                System.out.print(snippet.getText());
                if (isHighlighted)
                    System.out.print("]");
            }
            System.out.println();
        }
        System.out.println();
    }
}

我得到的输出是:

Matched 1 locations in user/vikram:
[vikram@gmail.com]

我从以下链接获得帮助,使其与新的 Marklogic 9 版本一起使用,因为 KeyValueQueryDefinition 在最新版本中已被弃用。

https://docs.marklogic.com/guide/relnotes/chap4#id_22988

是否有变体来更改此处的KeyValueQueryDefinition代码

 KeyValueQueryDefinition query = queryMgr.newKeyValueDefinition();
        query.put(queryMgr.newElementLocator(new QName("emailAddress")),"vikram@gmail.com");

使用 QBE 搜索以下链接中提到的文档:

https://docs.marklogic.com/guide/java/searches#id_69351

关于如何解决这个问题的任何建议??

最佳答案

我可能不明白这个问题。您不会简单地按照 link you provided 中的说明进行操作吗? ?

String rawXMLQuery =
  "<q:qbe xmlns:q='http://marklogic.com/appservices/querybyexample'>"+
    "<q:query>" +
      "<emailAddress>vikram@gmail.com</emailAddress>" +
    "</q:query>" +
  "</q:qbe>";
StringHandle rawHandle = 
    new StringHandle(rawXMLQuery).withFormat(Format.XML);
RawQueryByExampleDefinition query =
    queryMgr.newRawQueryByExampleDefinition(rawHandle);

关于java - 替换 MarkLogic 中弃用的 KeyValueQueryDefinition 以使用 Query By Example,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47175690/

相关文章:

java - android:如何从扩展 RecyclerView 的类更新徽章 TextView

xml - MarkLogic:XQuery 从 XML 文档中获取唯一名称?

java - Spring QueryByExampleExecutor 空结果

java - Hibernate:通过示例和多对一关系进行查询

java - 如何检测组合选择是否是第一次选择

java - 哈夫曼压缩压缩后的文件比原始文件大

marklogic - 关闭引导主机导致 Marklogic 中整个集群宕机

Java - 处理给出 JSON 文档的 Marklogic eval 响应

java - Hibernate 示例未找到任何实例

java - 如何使用属性名称识别 setter 方法?