Marklogic Optic lib op:sql-condition 不适用于多个 LIKE 条件

问题描述 投票:0回答:1

我正在尝试使用 marklogic 中的 Xquery optic lib 根据此条件过滤文档。但 op:sql-condition 似乎没有按预期工作。

op:sql-condition("Employee.employeeName LIKE '%JOHN%' AND Employee.employeeName LIKE '%Smith%' AND Employee.employeeName LIKE '%Eric%'")

使用这个条件,我希望获得包含这些员工姓名的所有文档,但它只返回条件中的第一个文档。在这种情况下,它是约翰。

如何更新此查询以使用具有多个条件的 AND?

xquery marklogic marklogic-optic-api
1个回答
2
投票

根据开发者文档

...过滤器定义不能在光学布尔表达式中使用,但必须是 WHERE 调用的唯一参数。

进一步:

条件必须是表示为字符串的有效简单 SQL 布尔表达式。

所以这意味着:SQL 表达式中没有布尔运算,而只是布尔结果。

可以连接多个where条件,实现它们之间的“与”运算。我对文档页面中的示例进行了一些扩展以表明:

xquery version "1.0-ml";

import module namespace op="http://marklogic.com/optic" at "/MarkLogic/optic.xqy";

op:from-literals((
  map:entry("id", 1) => map:with("name", "Master 1") => map:with("date", "2015-12-01"),
  map:entry("id", 2) => map:with("name", "Master 2") => map:with("date", "2015-12-02"),
  map:entry("id", 3) => map:with("name", "Master 3") => map:with("date", "2015-12-03"),
  map:entry("id", 4) => map:with("name", "Master 4") => map:with("date", "2015-12-04")))

=> op:where(op:sql-condition("id BETWEEN 0.5 AND 3.5"))
=> op:where(op:sql-condition("id > 2"))
=> op:result()

这会给出 ID 为 3 的条目,因为它的 ID 介于 0.5 和 3.5 之间并且大于 2。您也应该能够将其应用于三个单独的类似语句。

© www.soinside.com 2019 - 2024. All rights reserved.