5

我使用 marklogic 的搜索功能来创建搜索页面。截至目前,我正在运行 XQuery 以通过search:search. 作为一个简单的示例,请参见以下代码:

    xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search"
        at "/MarkLogic/appservices/search/search.xqy";

search:search('test',
     <options xmlns='http://marklogic.com/appservices/search'></options>)

此搜索搜索数据库中的所有内容,这在许多情况下都很好。在其他情况下,我使用cts:collection-query. 这些收藏品为我的搜索提供了很好的背景。

现在,我想根据“主”文档中的数据关系来限制我的搜索结果。这个“主”文档具有对象模型中的所有关系。如果该对象模型具有对文档的引用,我希望该文档包含在搜索中。本质上,“主”/模型文档是搜索的上下文。

我试图集思广益,想出一些最好的方法来解决这个问题。到目前为止,这是我想出的,但我希望更熟悉 Marklogic 的人(我只使用它 6 个月)可以引导我朝着一个好的方向前进:

  1. 将模型文档中引用的所有文档添加到唯一集合中。然后根据该集合查询搜索。但是,随着模型的更改,必须更新集合。
  2. 将模型文档加载到我的代码中并获取所有引用的列表并将它们添加到查询cts:document-query(或类似)。
  3. 在我的 XML 文档中以某种方式重构我的“模型”概念。

感谢您的任何意见或建议。

4

2 回答 2

3

我将从(2)开始,看看性能是否足够好。这将取决于您的用例,但我希望它应该适用于数千甚至数十万的参考。

请务必使用单项cts:document-query($list-of-references). 这将比 快cts:or-query(for $ref in $list-of-references return cts:document-query($ref)),因为索引查找可以是单遍而不是 N 个单独的查找。

于 2013-08-15T19:06:15.463 回答
2

所有这些想法都可以正常工作。决定使用哪个取决于您的应用程序的细节,例如主文档的更改频率(以及您是否可以控制它),重构 XML 的难度。

要考虑的另一件事是您可以在文档更新上设置一个触发器,该触发器可以自动执行集合更改。

——大卫·李

于 2013-08-15T17:57:18.433 回答