cts:word-查询在 json 属性 中搜索一个数字

cts:word-query to search in a json property for a number

我有一个 json 文件,它的属性有字符串值,有些有整数值。我有一个通用查询,它查询给定的 json 属性使用 cts:word 查询的值。这在 json 属性 具有字符串值时有效,但对于数字值则不起作用。例如:

以下是我的 json 字符串

{
    "id": "35A7D24661CFB8A7E050480A751E4949",
    "moniker": "CL-1460933",
    "entityType": "Cell Line",
    "entitySubType": "Immortalized",
    "bioSafetyLevel": "BL2",
    "name": "WSU-NHL",
    "growthFS": {
        "id": "35A7D24661D1B8A7E050480A751E4949",
        "mediumUsed": "IMDM + 10% HS",
        "percentCO2": 5,
        "percentHumudity": 95,
        "percentSerum": 10,
        "spinnerPlateSpeed": -1,
        "temp": -1,
        "growthConditions": "Suspension"
    },
}

当我执行以下操作时

cts:search(fn:doc(),
cts:json-property-scope-query("growthFS", cts:json-property-scope-query("percentHumudity", 
cts:word-query("95", ("wildcarded"), 1))))[1]

我没有得到 json,但是当我执行以下操作时

cts:search(fn:doc(),
cts:json-property-scope-query("growthFS", cts:json-property-value-query("percentHumudity", 95, "wildcarded")))[1]

我得到了文件,我的印象是 cts:word-query 适用于任何 xs:atomicType.. 如果不是这种情况,我怎么能写一个通用的 cts:query 而不是考虑到字符串的原子类型(字符串或数字)。

在 XML 中,所有内容都是字符数据,并且 - 没有 XML 模式 - 是不可区分的类型。因此,MarkLogic 将所谓的通用索引中的所有 XML 值作为字符串值包含在内,因为它在索引时没有模式知识。在 JSON 中,布尔值和数字值具有显式类型,即使没有架构,因此也可以这样进行索引。 MarkLogic 会照做。

因此,您需要使用值查询来匹配 JSON 数字。您应该能够对相同值的词和值查询执行 OR 查询:

cts:search(
  fn:collection(),
  cts:json-property-scope-query("growthFS",
    cts:or-query((
      cts:json-property-word-query("percentHumudity", "95", "wildcarded"),
      cts:json-property-value-query("percentHumudity", 95, "wildcarded")
    ))
  )
)[1]

HTH!