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!
我有一个 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!