我如何通过在MarkLogic中加入值对cts查询进行排序?

问题描述 投票:2回答:1

当我在XQuery中使用cts:search时,通过访问文档的元素,我可以很容易地进行排序。

cts:search(
  fn:doc(), 
  cts:directory-query("/textdocuments/"), 
  cts:index-order(cts:element-reference(xs:QName("title")), "ascending")
)

问题是我要用于排序的值包含在另一个文档中,而找到的文档中的值仅是参考。例如。标题不必翻译,翻译存储在单独的文档中,我想在翻译后进行排序。在SQL中,解决方案是执行内部联接,然后对联接的值进行排序。有可能采取类似的解决方案吗?

我已经尝试过使用FLWOR表达式的Order部分,但在此过程中性能并不是最佳的,因为它需要加载所有文档,而我只想加载前20个。

xquery marklogic marklogic-9
1个回答
1
投票

好的,所以您有主要的文本文档和一个单独的文档,并带有标题翻译。如前所述,在关系数据库中,常用的方法是让另一个表进行联接。在MarkLogic中,可能最好的方法是将这些翻译的标题移入它们作为参考的文档中。 MarkLogic通常经过优化,可对目标文档中的内容进行排序。

<doc>
  <title>My Title</title>
  <title-de>My Title in German</title-de>
  <title-fr>My Title in French</title-fr>
  <content>...</content>
</doc>

我在这里不涉及任何特定于语言的搜索/标记化/等等,只是将您要使用的数据汇总在一起。

值得注意的是,另一种方法是使用TDE和Optic API。您可以在主要文档和带有翻译标题的文档上创建视图,进行联接和排序。在不了解细节的情况下,很难确定,但是我希望第一种方法会更好。

© www.soinside.com 2019 - 2024. All rights reserved.