Sitecore中多选择字段搜索查询无结果问题求助
多选项Category字段过滤导致GraphQL查询返回空结果排查
我运行两个GraphQL查询:
- GetListOfPocketCardsWithoutCategory:该查询可正常返回包含多选Category字段的结果,相关查询语句、变量及返回数据如下:
query($after: String, $LimitPerPage : Int) { categories: search( where: { AND: [ { name: "_templates" value: "CB19F29D-C01B-4950-A67A-7C00756328AB" operator: EQ } { name: "_path" value: "D744F0C5-FA3A-47BE-AC95-C453BAFB7564" operator: CONTAINS } { name: "_language" value: "en" operator: EQ } ] }, first : $LimitPerPage, after : $after, ) { results { fields { name jsonValue } } total pageInfo { hasNext endCursor } } }
变量:
{ "after" : "", "LimitPerPage" : 1000 }
返回数据:
{ "data": { "categories": { "results": [ { "fields": [ { "name": "Download Link", "jsonValue": { "value": "" } }, { "name": "Download Link CTA", "jsonValue": { "value": "" } }, { "name": "Download Title CTA", "jsonValue": { "value": "" } }, { "name": "Schema", "jsonValue": { "value": "" } }, { "name": "Metadata Keywords", "jsonValue": { "value": "" } }, { "name": "Metadata Description", "jsonValue": { "value": "" } }, { "name": "Metadata Title", "jsonValue": { "value": "" } }, { "name": "Page Title", "jsonValue": { "value": "" } }, { "name": "Published Date Section", "jsonValue": { "value": "" } }, { "name": "Page Alias", "jsonValue": { "value": "" } }, { "name": "Description", "jsonValue": { "value": "" } }, { "name": "Category", "jsonValue": [ { "id": "d820b902-b9b7-4d27-9a15-3eec213fc5bd", "url": "/Data/Categories/Medical Surgical Nursing", "name": "Medical Surgical Nursing", "displayName": "Medical Surgical Nursing", "fields": {} }, { "id": "dd67c0b2-f20f-4026-90f7-70ee8f28972a", "url": "/Data/Categories/Gastroenterology Nursing", "name": "Gastroenterology Nursing", "displayName": "Gastroenterology Nursing", "fields": {} }, { "id": "44d461cc-a8c0-42f3-9ec6-2a819302aa6f", "url": "/Data/Categories/Home Health Nursing", "name": "Home Health Nursing", "displayName": "Home Health Nursing", "fields": {} }, { "id": "837d8ffe-e5c6-425c-b7fa-4706933fafa4", "url": "/Data/Categories/Primary Care", "name": "Primary Care", "displayName": "Primary Care", "fields": {} } ] } ] }, { "fields": [ { "name": "Download Link", "jsonValue": { "value": "" } }, { "name": "Download Link CTA", "jsonValue": { "value": "" } }, { "name": "Download Title CTA", "jsonValue": { "value": "" } }, { "name": "Schema", "jsonValue": { "value": "" } }, { "name": "Metadata Keywords", "jsonValue": { "value": "" } }, { "name": "Metadata Description", "jsonValue": { "value": "" } }, { "name": "Metadata Title", "jsonValue": { "value": "" } }, { "name": "Page Title", "jsonValue": { "value": "" } }, { "name": "Published Date Section", "jsonValue": { "value": "" } }, { "name": "Page Alias", "jsonValue": { "value": "" } }, { "name": "Description", "jsonValue": { "value": "" } }, { "name": "Category", "jsonValue": [ { "id": "80382f82-92d8-4df0-9ec3-174e1533aac0", "url": "/Data/Categories/Critical Care Nursing", "name": "Critical Care Nursing", "displayName": "Critical Care Nursing", "fields": {} }, { "id": "d820b902-b9b7-4d27-9a15-3eec213fc5bd", "url": "/Data/Categories/Medical Surgical Nursing", "name": "Medical Surgical Nursing", "displayName": "Medical Surgical Nursing", "fields": {} }, { "id": "a593aa5d-1038-42af-bb8d-fb3b5bb61891", "url": "/Data/Categories/Nephrology Urology", "name": "Nephrology Urology", "displayName": "Nephrology Urology", "fields": {} }, { "id": "837d8ffe-e5c6-425c-b7fa-4706933fafa4", "url": "/Data/Categories/Primary Care", "name": "Primary Care", "displayName": "Primary Care", "fields": {} } ] } ] } ], "total": 2, "pageInfo": { "hasNext": false, "endCursor": "Mg==" } } } }
- GetListOfPocketCardsWithCategory:添加Category字段ID作为过滤条件后,查询返回空结果。相关查询语句及变量如下:
query($Category: String, $after: String, $LimitPerPage : Int) { categories: search( where: { AND: [ { name: "_templates" value: "CB19F29D-C01B-4950-A67A-7C00756328AB" operator: EQ } { name: "_path" value: "D744F0C5-FA3A-47BE-AC95-C453BAFB7564" operator: CONTAINS } { name: "_language" value: "en" operator: EQ } { name: "Category" value: $Category operator: EQ } ] }, first : $LimitPerPage, after : $after, ) { results { fields { name value } } total pageInfo { hasNext endCursor } } }
变量:
{ "Category": "d820b902-b9b7-4d27-9a15-3eec213fc5bd", "after": "", "LimitPerPage" : 10000 }
问题原因及解决方法
从返回数据可以看到,Category字段是数组类型(存储多个分类对象),而直接用EQ操作符匹配单个ID字符串,这种匹配方式不适用于数组类型字段。
针对数组类型的多选项字段,需要使用适配的操作符,比如IN或CONTAINS(具体取决于你的GraphQL API支持的操作符)。修改后的过滤条件如下:
{ name: "Category" value: $Category operator: IN # 或根据API文档使用CONTAINS }
部分API可能要求传入数组格式的参数,此时需要调整变量为数组形式:
{ "Category": ["d820b902-b9b7-4d27-9a15-3eec213fc5bd"], "after": "", "LimitPerPage" : 10000 }
另外注意,第一个查询返回字段用的是jsonValue,第二个查询用的是value,如果API要求字段名一致,建议统一为jsonValue,避免返回字段不匹配的问题。
内容的提问来源于stack exchange,提问作者Piyush Pandita
相关产品推荐
相关产品推荐

