Search 数据关系作为Marklogic中搜索的上下文

Search 数据关系作为Marklogic中搜索的上下文,search,xquery,marklogic,Search,Xquery,Marklogic,我使用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:s

我使用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>)
xquery版本“1.0-ml”;
导入模块命名空间搜索=”http://marklogic.com/appservices/search"
位于“/MarkLogic/appservices/search/search.xqy”;
搜索:搜索('测试',
)
此搜索搜索数据库中的所有内容,在许多情况下这是正常的。在其他情况下,我使用
cts:collection query
基于集合进行搜索。这些收藏为我的搜索提供了很好的背景

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

我想集思广益,想出一些最好的办法。以下是我到目前为止的想法,但我希望更熟悉Marklogic的人(我只使用它6个月)能引导我朝着一个好的方向前进:

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

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

    所有这些想法都很好用。决定使用哪一个取决于您的应用程序的细节,例如主文档的更改频率(以及您是否控制它), 重新构建XML有多难

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

    -David Lee

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


    确保使用单个术语
    cts:documentquery($list of references)
    。这将比cts:or查询(对于$list of references中的$ref返回cts:document query($ref))更快。,因为索引查找可以是一个单一过程,而不是N个单独的查找。

    我喜欢添加触发器的想法。最后使用了#1#2在我的数据库中大约慢了3倍。此外,由于XML中的庞大关系模型,#2的代码开始变得难看。有了集合,我可以让所有开发人员轻松地重用。我很可能在将来实现触发器。