azure-cognitive-search - 在嵌套的 ComplexTypes 中过滤
问题描述
我正在尝试根据 tagdata/tags/tag 的值进行过滤。对我有什么想法吗?基本上我只想选择标签文本与特定字符串匹配的文档。谢谢!
过滤器:
search=*&$filter=tagdata/tags/any(tag: tagdata/tags/tag eq 'text1')
错误:
Invalid expression: The parent value for a property access of a property 'tag' is not a single value. Property access can only be applied to a single value.
我有一个 ComplexType 定义,如下所示:
{
"name": "tagdata",
"type": "Edm.ComplexType",
"analyzer": null,
"synonymMaps": [],
"fields": [
{
"name": "tags",
"type": "Collection(Edm.ComplexType)",
"analyzer": null,
"synonymMaps": [],
"fields": [
{
"name": "tagid",
"type": "Edm.Int64",
"facetable": false,
"filterable": true,
"retrievable": true,
"sortable": false,
"analyzer": null,
"indexAnalyzer": null,
"searchAnalyzer": null,
"synonymMaps": [],
"fields": []
},
{
"name": "tag",
"type": "Edm.String",
"facetable": true,
"filterable": true,
"key": false,
"retrievable": true,
"searchable": true,
"sortable": false,
"analyzer": "en.lucene",
"indexAnalyzer": null,
"searchAnalyzer": null,
"synonymMaps": [],
"fields": []
}
]
}
]
},
数据如下所示:
{
"tags": [
{
"tagid": 83,
"tag": "text1"
},
{
"tagid": 29,
"tag": "text2"
},
{
"tagid": 69,
"tag": "text3"
},
{
"tagid": 115,
"tag": "text4"
}
]
}
解决方案
这应该有效:
search=*&$filter=tagdata/tags/any(t: t/tag eq 'text1')
将any
lambda 表达式视为对tags
集合的循环,其中冒号后面的标识符是循环变量。该变量属于复杂类型,因此您可以使用斜杠访问其属性。
推荐阅读
- r - 如何更快地数值求解 R 中的 ODE
- python-2.7 - 如何让不同的解析器在 pyparsing 中处理由 nestedExpr 标识的内容
- javascript - 传单地图无法在手机上正确显示
- mongodb - 在 MongoDB 中存储数据需要多少空间?
- qt - 如何在 PyQt5 中构建一个扁平的 groupbox?
- ios - 按下 tableview 单元格时如何添加深色?
- c++ - 使用 SIMD 指令执行任意 128/256/512 位排列的最快方法是什么?
- excel - 如何打印并保存我的最后一个数组?
- c++ - 如何将 Crypto++ 包含到 VS 项目中
- excel - 带有引用的自动单击单元格