首页 > 解决方案 > 在嵌套的 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"
    }
  ]
}

标签: azure-cognitive-search

解决方案


这应该有效:

search=*&$filter=tagdata/tags/any(t: t/tag eq 'text1')

anylambda 表达式视为对tags集合的循环,其中冒号后面的标识符是循环变量。该变量属于复杂类型,因此您可以使用斜杠访问其属性。


推荐阅读