Jes*_*eta 5 java search xpath marklogic
我有以下Marklogic查询,当在查询控制台中运行时,允许我检索具有管理员权限的系统用户:
xquery version "1.0-ml";
import schema namespace bfa="http://bitfood.org/auth" at "schema/auth/bitfood-auth.xsd";
cts:search(/bfa:AppUser[bfa:appAccess/@appRole = "ROLE_SYS_ADMIN"], cts:and-query(()))
请原谅我的无知,但是是否可以仅使用Java客户端API实现此查询?
我知道我可以通过XCC使用原始查询,但我尽量避免这种情况.
我一直在深入研究Java客户端API的文档,遗憾的是,这些文档简要介绍了其他搜索方法,并没有发现任何暗示这是可能的.
更新1:伙计们,我想我在这里打了一场比赛.
根据此问题,Java客户端API的查询选项构建工具被标记为已弃用.
@ehennum建议使用XML或JSON查询选项的替代方案.但是,此类查询选项规范仍然在代码中基本上定义为原始字符串:
String xmlOptions =
  "<search:options "+
        "xmlns:search='http://marklogic.com/appservices/search'>"+
      "<search:constraint name='industry'>"+
        "<search:value>"+
          "<search:element name='industry' ns=''/>"+
        "</search:value>"+
      "</search:constraint>"+
  "</search:options>";
当然,我可以使用JAXB,JDOM,文件或其他工具来创建XML,但我的个人意见是我们仍然依赖于在代码中的资源文件中存储查询,这本身并不是坏事,但没有仔细考虑可能导致代码维护噩梦.
此外,这些选项需要通过服务器上的REST持久化这一事实引入了另外一层潜在问题,以防这是必需的,因为选项可能需要与每个用于代码库的数据库实例同步.
因此,如果Marklogic开发人员正在监听,我认为Java客户端API并不像我预期的那样成熟或记录.
到目前为止我有两个选择:
1)我可以在String文件中对我的XCC查询进行硬编码,并尝试使用参数占位符来插入我需要的数据并通过XCC会话检索.要么.
2)查看http://marklogic.com/appservices/search命名空间是否有任何XSD文件,并从中创建静态JAXB对象,以便构建某种"标准"类,Hibernate或QueryDSL,遗憾的是,我必须说,它已经支持某种级别的MongoDB查询.
伙计们,真的,带来一些流利的查询设施,如QueryDSL到Marklogic,并摆脱这个Rube Goldberg查询机器.
更新2:似乎可以在ML7中解决这个问题.期待它.
谢谢!
背景: Java API 是 REST API 的一层,是 Search API 的一层,是 cts:search 的一层
您可以在搜索 API 中表达此查询。
对查询选项中的第一个参数使用可搜索表达式http://docs.marklogic.com/guide/search-dev/search-api#id_43671
对结构化查询使用空和查询http://docs.marklogic.com/guide/search-dev/structured-query#id_83674
使用 Java API,您可以使用查询选项和结构化查询作为 RawCombinedQueryDefinition 进行搜索。
尽管如此,您也可以在 bfa:AppUser 上搜索元素查询,其中包含对 bfa:appAccess/@appRole 的“ROLE_SYS_ADMIN”值约束查询
虽然 XPath 很方便,但最好熟悉查询表达式以了解数据库的全部功能和灵活性。
更新1:
有几点需要考虑:
搜索 API 中的查询由两部分组成:查询(使用 Google 风格的字符串搜索或 JSON 或 XML 结构化搜索表示)和查询选项。StructuredQueryBuilder 构建结构化搜索。QueryOptionsBuilder 仅构建查询选项。
在 ML 6.0-3 中,REST API 引入了对组合搜索的支持,它在单个请求中提供两个部分。Java API 通过 RawCombinedQueryDefinition 类添加了对此类请求的支持。
ML7 正在扩展结构化搜索,以减少或消除对结构化搜索查询选项的需求。StructuredQueryBuilder 在 ML7 中得到增强,可支持结构化搜索的新功能。在 ML7 中,您将能够完全在 StructuredQueryBuilder 中编写上面的示例查询,而无需任何查询选项。
当我们将构建查询选项的代码与 QueryOptionsBuilder 以及 JDOM 或 XOM 进行比较时,很难在构建器中看到 LOC 的好处。
您不必在字符串中硬编码查询选项。为了分离关注点,您可以从文件或许多其他源读取 JSON 或 XML 查询选项。(请参阅http://docs.marklogic.com/javadoc/client/com/marklogic/client/io/marker/QueryOptionsReadHandle.html标记接口的实现。)
查询选项提供声明而不是可执行代码。类似的情况是使用 Spring 配置文件而不是 SPL 文件。
顺便说一句,虽然 JAXB 对于源自 Java 类的设计非常有用,但对于源自复杂 XML 模式的设计来说,JAXB 可能会非常痛苦。搜索模式利用了 XML 模式的强大功能。当我们探索这条路线时,我们得出的结论是 JAXB 不会帮助提供查询选项的接口。
| 归档时间: | 
 | 
| 查看次数: | 968 次 | 
| 最近记录: |