MarkLogic,JavaAPI。获取已排序的搜索结果
抱歉,这可能是个愚蠢的问题,但我在MarkLogic的文档中找不到: 我正在从某个系列中选择所有项目,希望首先获得最新的项目。因此,我正在寻找一些能力,以获得搜索结果排序。我通过XQuery看到了这一点,但在JavaAPI中找不到 总之,我的问题是:MarkLogic,JavaAPI。获取已排序的搜索结果,marklogic,Marklogic,抱歉,这可能是个愚蠢的问题,但我在MarkLogic的文档中找不到: 我正在从某个系列中选择所有项目,希望首先获得最新的项目。因此,我正在寻找一些能力,以获得搜索结果排序。我通过XQuery看到了这一点,但在JavaAPI中找不到 总之,我的问题是: 是否可以通过Java API获得按“lastModifyTime”排序的搜索结果(据我所知,这是一些自动创建/更新的字段) 是否可以通过按自定义属性排序的Java API获取搜索结果 更新: 正如@mblakele在他的回答中提到的那样,Query
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)?您可以使用设置排序顺序。位于的教程介绍了如何设置查询选项。没有关于
QuerySortOrder
的示例,但是使用它应该非常简单。搜索API(以及它上面的REST API和Java API层)只能根据返回片段的索引进行排序
MarkLogic确实提供上次修改的属性,默认情况下该属性处于禁用状态。您可以使用管理UI的数据库配置页面中的“维护上次修改”复选框启用它。但是,该值存储在properties片段中。因此,在检索文档时不能对该属性进行排序
但是,您可以在编写文档时将最后修改的元素添加到文档中。文档写入转换提供了插入该元素的一种方法:
然后可以在管理UI中的元素上创建日期时间范围索引
要在搜索时使用范围索引,请首先创建指定排序顺序的查询选项。QueryOptions和QueryOptions Builder类已被弃用,因此最好编写原始查询选项:
对于排序,您的查询选项类似于以下内容
<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>
顺便说一下,这里描述了完整的查询选项集:
希望这是有用的
Erik Hennum感谢您的回答,但如何使用此QuerySortOrder对我来说并不那么简单(请参阅我问题中更新的详细信息)。你能把你的答案扩大一点吗?