2017-09-01 95 views
1

我有一个json文件,它具有字符串值的属性和一些具有整数值..我有一个通用的查询,它查询给定的json属性值使用cts:字查询。这工作时,JSON酒店的字符串值,但数量值它不工作..对于例如:cts:在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] 

我得到的文件,我是unde r对于任何xs:atomicType都适用。如果不是这种情况,我怎样才能在不考虑字符串(字符串或数字)的原子类型的情况下编写通用cts:查询。

回答

1

在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!