Marklogic 使用search:search API进行连接

Marklogic 使用search:search API进行连接,marklogic,Marklogic,使用search:search API时,应该如何连接查询 我看到,一个人可以使用“散播查询”或“散播查询”,但它不使用“搜索:搜索”。在“MarkLogic Dev General”邮件列表中,我发现理论上这可以通过搜索约束来实现,但我无法理解它到底应该如何工作 我的用例如下所示: 我用它来构造我的查询。如果可能的话,我希望避免使用xqy扩展 我有两种实体(例如书籍和作者),我可能想做如下查询:给我1980年出版的巴西作者的书。也就是说,我希望在两个实体上进行过滤并合并结果,而无需对数据进行非

使用search:search API时,应该如何连接查询

我看到,一个人可以使用“散播查询”或“散播查询”,但它不使用“搜索:搜索”。在“MarkLogic Dev General”邮件列表中,我发现理论上这可以通过搜索约束来实现,但我无法理解它到底应该如何工作

我的用例如下所示:

  • 我用它来构造我的查询。如果可能的话,我希望避免使用xqy扩展
  • 我有两种实体(例如书籍和作者),我可能想做如下查询:给我1980年出版的巴西作者的书。也就是说,我希望在两个实体上进行过滤并合并结果,而无需对数据进行非规范化

  • 搜索API没有为shotgun或提供声明性接口是正确的

    如果您使用的是MarkLogic 9(尤其是最新版本中的性能增强),您可能会发现Optic API满足您的要求:

    Java API提供了一个流畅的构建器,用于实体之间直接连接的光学查询,而不需要使用散弹枪或散弹枪

    如果您使用的是MarkLogic的早期版本,或者由于某种原因Optic不符合您的要求,您可以使用值查询来检索与第一个请求中的查询匹配的所有巴西作者的姓名,从而完全用Java进行散弹枪或查询:

    然后,使用检索到的值构造一个查询,以检索这些作者在第二个请求中编写的书籍:

    这可能非常简单,只需构造一个名称值数组并将该数组传递到单个范围查询:

    这种基于Java的散弹枪或查询方法的成本包括两个网络往返:一个是获取从服务器到Java客户端的名称列表,另一个是获取文档

    为了提高散弹枪的性能,请在MarkLogic enode上创建一个XQuery或服务器端JavaScript(SJS)模块,该模块接受查询条件并执行散弹枪或查询,然后执行文档查询。然后,您可以通过调用执行enode模块:

    或使用资源服务扩展:


    希望这能有所帮助,

    手动猎枪或查询确实不是一个选项。在真实的用例中,可能会返回数千个值。我们已经在xquery扩展文件中完成了这项工作,我希望我可以使用search:search做类似的事情。看起来情况并非如此,对吗?搜索API没有为shotgun或提供声明性接口是正确的。您能在回答中说明这一点吗?我想这回答了我的问题。而且,请在答案中保留原始信息,因为它非常有用。