【问题标题】:MarkLogic, java API. Get search results sortedMarkLogic,Java API。获取排序的搜索结果
【发布时间】:2014-05-11 08:54:45
【问题描述】:

抱歉,这可能是一个愚蠢的问题,但我无法在 MarkLogic 的文档中找到它:

我正在从某个集合中选择所有项目,并希望首先获得最新的。所以我正在寻找一些对搜索结果进行排序的能力。我通过 XQuery 看到它是可能的,但无法在 Java API 中找到它。

所以,总而言之,我的问题是:

  1. 是否可以通过按“lastModifyTime”排序的 Java API 获取搜索结果(据我了解,这是一些自动创建/更新的字段)?
  2. 是否可以通过按我的自定义属性排序的 Java API 获取搜索结果?

更新:

正如@mblakele 在他的回答中提到的 - 有 QueryOptions.QuerySortOrder,可用于此目的。我查看了他们的教程,对我来说并不是那么简单,如何使用它。

我在我的数据库中为我自己的属性“LAST_MODIFICATION_TIME”创建了范围索引,然后我使用以下代码创建了 QueryOptions:

QueryOptionsBuilder qob = new QueryOptionsBuilder();
RangeSpec rangeSpec = qob.fieldRangeIndex("LAST_MODIFICATION_TIME", qob.rangeType("xs:dateTime"));
QueryOptions.QuerySortOrder querySortOrder = qob.sortOrder(rangeSpec, QueryOptions.QuerySortOrder.Direction.DESCENDING);

接下来我该怎么做?只需使用以下命令将其写入 REST 服务器:

QueryOptionsHandle optsHandle = new QueryOptionsHandle().withSortOrders(querySortOrder);
databaseClient.newServerConfigManager().newQueryOptionsManager().writeOptions("myConstraintName", optsHandle);

如果是 - 我如何将它用于我的进一步搜索查询(我正在使用 StructuredQueryBuilder)?

【问题讨论】:

    标签: marklogic


    【解决方案1】:

    搜索 API(以及其上方的 REST API 和 Java API 层)只能对返回的片段的索引进行排序。

    MarkLogic 确实提供了最后修改属性,默认情况下该属性是关闭的。您可以使用管理 UI 的数据库配置页面中的“维护上次修改”复选框来启用它。但是,此值存储在属性片段中。因此,在检索文档时,您无法对该属性进行排序。

    但是,您可以在编写文档时将 last-modified 元素添加到文档中。文档写入转换提供了一种插入该元素的方法:

    http://docs.marklogic.com/guide/java/transforms

    然后您可以在管理 UI 中的元素上创建日期时间范围索引。

    要在搜索时使用范围索引,首先创建指定排序顺序的查询选项。 QueryOptions 和 QueryOptionsBuilder 类已弃用,因此最好编写原始查询选项:

    http://docs.marklogic.com/guide/java/query-options#id_20346

    对于排序,您的查询选项类似于以下内容

    <search:options xmlns:search="http://marklogic.com/appservices/search">
    <search:sort-order type="xs:dateTime" direction="ascending">
      <search:element ns="" name="my-last-modified"/>
    </search:sort-order>
    </search:options>
    

    顺便说一下,这里描述了完整的查询选项:

    http://docs.marklogic.com/guide/rest-dev/appendixb#id_33716

    希望有用,

    埃里克·亨纳姆

    【讨论】:

      【解决方案2】:

      您可以使用QueryOptions.QuerySortOrder 设置排序顺序。 https://developer.marklogic.com/learn/java/custom-search 的教程解释了如何设置查询选项。 QuerySortOrder 没有示例,但使用起来应该很简单。

      【讨论】:

      • 感谢您的回答,但对我来说并不是那么简单,如何使用这个 QuerySortOrder(请参阅我的问题中的更新详细信息)。你能把你的答案扩大一点吗?
      猜你喜欢
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多