从 MarkLogic 搜索中检索字段值

Retrieve the field values from a MarkLogic search

我在 MarkLogic 中有一个 XQuery FLOWR 搜索,如下所示,returns 在基于字段排序的集合中分页匹配文档

let $options := 
  <options xmlns="http://marklogic.com/appservices/search">
    <transform-results apply="raw"/>
    <additional-query> 
      {cts:collection-query("http://example.com/myCollectionName")} 
    </additional-query>
    <sort-order direction="descending" >
      <field name="myCustomFieldA" />
    </sort-order>
     <debug>true</debug> 
  </options>

for $searchResults in search:search("someQuery", $options, 1, 10)
return $searchResults

我在具有相应字段范围索引的文档上设置了几个自定义字段,我想检索匹配文档的字段中的值,而不是文档本身。像下面这样的东西?

for $searchResults in search:search("someQuery", $options, 1, 10)
return get-field-values($searchResults, ("myCustomFieldA", "myCustomFieldB"))

我如何return这些字段值?

您的示例表明您希望结果按特定范围索引分页和排序。

cts:field-values() 可以在您的迭代中使用文档 URI 作为传递给第四个参数(查询参数)的文档查询的一部分。

不过,您可能会发现 cts:value-co-occurences 很有用。

搜索 API 确实支持使用 XPath 提取部分文档,这可能接近您想要的:

http://docs.marklogic.com/guide/search-dev/query-options#id_37692

如果您想 return 实际文档,您可能会发现 search:resolve-nodes() 函数比 search:search() 和 transform raw:

http://docs.marklogic.com/search:resolve-nodes

最后,如果您的字段有范围索引,search:values() 可以根据文档中的共现构造元组,这应该比检索文档更快,因为值是从索引中检索的:

http://docs.marklogic.com/search:values