MarkLogic:仅返回确切的搜索结果

时间:2017-10-23 09:20:36

标签: java marklogic

我正在使用MarkLogic Java API。我想搜索某个String,只返回该String与文档中的某个键匹配的文档。我明确地只想搜索字符串,我不想提前指定此字符串必须匹配的键。

例1:

    DatabaseClient client = DatabaseClientFactory.newClient(Config.host, Config.port, new DigestAuthContext(Config.user, Config.password));
    QueryManager queryMgr = client.newQueryManager();
    queryMgr.setPageLength(100);

    // create a search definition
    StringQueryDefinition query = queryMgr.newStringDefinition();

    // Search for the term
    query.setCriteria("2017");

    SearchHandle resultsHandle = new SearchHandle();

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

在此示例中搜索“2017”也会以以下形式返回文档:

{"Example1":{"key1":"bla", "key2":"2017-10-12T15:37:53.204Z"}}

它应该只返回这样的文件:

{"Example1":{"key1":"bla", "key2":"2017"}}

我也尝试了以下内容。例2:

    DatabaseClient client = DatabaseClientFactory.newClient(Config.host, Config.port, new DigestAuthContext(Config.user, Config.password));
    QueryManager queryMgr = client.newQueryManager();
    queryMgr.setPageLength(100);

    // create a search definition
    StructuredQueryBuilder qb = new StructuredQueryBuilder();
    StructuredQueryDefinition query = qb.term( "2017");

    SearchHandle resultsHandle = new SearchHandle();

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

我尝试将搜索字词封装在上面的两个示例中\"\",如"\"2017\""。那里也没有运气。

1 个答案:

答案 0 :(得分:1)

我不知道有什么方法不要求您指定此字符串必须匹配的键。我认为你最接近的是创建一个封装可能元素名称列表的字段。即使您必须自动化字段创建并在摄取新内容(和新元素名称)时更新它,也不可能枚举它们。然后你可以这样做:

StructuredQueryBuilder sqb = new StructuredQueryBuilder();
QueryDefinition query = sqb.value(sqb.field("catchall"), "mark");
SearchHandle results = queryMgr.search(query, new SearchHandle());

另请注意,此问题与MarkLogic Java: Set Query Type to Value in StringQueryDefinition

重复