使用搜索时如何进行连接查询:搜索API?
我在Inside MarkLogic Server中看到可以使用'Shotgun OR'(散点查询),但它不使用'search:search'。在一个message的'MarkLogic Dev General'邮件列表中,我发现理论上这可以通过搜索约束来完成,但我无法理解它究竟应该如何工作。
我的用例如下:
答案 0 :(得分:1)
Search API没有为霰弹枪OR提供声明性接口是正确的。
如果您正在使用MarkLogic 9(特别是最新版本中的性能增强功能),您可能会发现Optic API符合您的要求:
http://docs.marklogic.com/guide/java/OpticJava
Java API不是要求霰弹枪OR,而是为实体之间直接连接的Optic查询提供了一个流畅的构建器。
如果您使用的是早期版本的MarkLogic,或者由于某种原因Optic不符合您的要求,您可以使用值查询完全使用Java执行鸟枪或查询,以检索匹配的所有巴西作者的姓名通过第一个请求中的查询:
http://docs.marklogic.com/guide/java/searches#id_83836
然后,使用检索到的值构造成一个查询,以检索这些作者在第二个请求中写的书:
http://docs.marklogic.com/guide/java/searches#id_70572
这可能就像构造名称数组并将数组传递到单个范围查询一样简单:
这种基于Java的猎枪OR查询方法的成本包括两个网络往返:一个用于获取从服务器到Java客户端的名称列表,另一个用于获取文档。
为了使用霰弹枪OR获得更好的性能,请在MarkLogic上创建一个XQuery或服务器端JavaScript(SJS)模块,该模块采用查询条件并执行霰弹枪OR查询,然后执行文档查询。然后,您可以使用invoke:
执行enode模块http://docs.marklogic.com/guide/java/resourceservices#id_84134
或使用资源服务扩展程序:
http://docs.marklogic.com/guide/java/resourceservices#id_27702
希望有帮助,