MarkLogic:搜索文档时附加查询不起作用

MarkLogic:搜索文档时附加查询不起作用,marklogic,marklogic-8,Marklogic,Marklogic 8,我们正在尝试使用元素范围索引跨文档检索特定元素的不同值。我们希望结果仅限于属于特定集合的文档 文档在逻辑上被划分为不同的集合,如“basedata”集合(保存所有应用程序基础数据文档)和“transactiondata”集合(保存应用程序的所有传入/传出事务) 现在的要求是将范围索引仅限于basedata收集文档,而不是transactiondata收集文档 已创建元素范围索引:entityName 二,。 编写了下面的代码,将元素范围索引与搜索:范围一起使用 String valueOptio

我们正在尝试使用元素范围索引跨文档检索特定元素的不同值。我们希望结果仅限于属于特定集合的文档

文档在逻辑上被划分为不同的集合,如“basedata”集合(保存所有应用程序基础数据文档)和“transactiondata”集合(保存应用程序的所有传入/传出事务)

现在的要求是将范围索引仅限于basedata收集文档,而不是transactiondata收集文档

  • 已创建元素范围索引:entityName
  • 二,。 编写了下面的代码,将元素范围索引与搜索:范围一起使用

    String valueOptionString = 
        " <search:options xmlns:search="http://marklogic.com/appservices/search">
        <search:values name="entityName">
            <search:range type="xs:string">
                <search:element name="entityName"/>
            </search:range>
        </search:values>
        <search:additional-query>
            <cts:collection-query xmlns:cts="http://marklogic.com/cts">
                <cts:uri>basedata</cts:uri>
            </cts:collection-query>
        </search:additional-query>
    </search:options> ";    
    
    QueryManager queryMgr = client.newQueryManager();
        QueryOptionsManager optionsMgr = client.newServerConfigManager().newQueryOptionsManager();
        optionsMgr.writeOptions("DistinctValues", new StringHandle(valueOptionString));
    
        ValuesDefinition vdef = queryMgr.newValuesDefinition("entityName", "DistinctValues");
        ValuesHandle vh = queryMgr.values(vdef, new ValuesHandle());
    
        for (CountedDistinctValue value : vh.getValues()) {
            System.out.println("Distinct value is :: " +
                value.get("xs:string", String.class));
        }
    

    上述结果是错误的,因为我没有在cts:uri

    中包含transactiondata集合,因此不应将DistinctValuesSystemNew视为DistinctNew。查询选项中定义的查询仅适用于搜索请求,而不适用于值请求

    通过使用setQueryDefinition()方法在值定义上设置查询,可以用查询约束值请求:

    查询可以包含集合查询。在示例中:

    <search:query>
      <search:collection-query>
        <search:uri>basedata</search:uri>
      </search:collection-query>
    </search:query>
    
    
    基础数据
    
    有关详细信息,请参阅:

    希望有帮助

    <?xml  version="1.0" encoding="UTF-8"?>
    <entity>
        <entityName>DistinctValueTestEntity</entityName>
        <createdBy>DistinctValuteSystemNew</createdBy>
        <createdDate>2017-01-03T05:56:35.360Z</createdDate>
        <status>Active</status>
        <entityattributes>
            <entityattribute>
            </entityattribute>
        </entityattributes>
    </entity>
    
    Company,DistinctValueteSystemNew
    
    <search:query>
      <search:collection-query>
        <search:uri>basedata</search:uri>
      </search:collection-query>
    </search:query>