Как индексировать сложные типы в Edm.ComplexType с помощью Azure Cognitive Search - PullRequest
0 голосов
/ 08 апреля 2020

Я индексирую данные в Azure Индекс поиска, который создается с помощью специального навыка. Этот пользовательский навык создает сложные данные, которые я хочу сохранить в поисковом индексе Azure.

Исходные данные поступают из хранилища больших двоичных объектов, и я вынужден использовать REST API без очень solid аргумент в пользу использования. NET SDK.

Текущий код

Ниже приводится краткое изложение того, что у меня есть в настоящее время. Я не могу изменить поле индекса или формат данных, созданных конечной точкой, используемой пользовательским навыком.

Сложные данные

Ниже приведен пример сложных данных, созданных пользовательским навыком (в правильный value/recordId/etc. формат):

{
  "field1": 0.135412,
  "field2": 0.123513,
  "field3": 0.243655
}

Пользовательский навык

Вот пользовательский навык, который создает указанные данные:

{
  "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
  "uri": "https://myfunction.azurewebsites.com/api,
  "httpHeaders": {},
  "httpMethod": "POST",
  "timeout": "PT3M50S",
  "batchSize": 1,
  "degreeOfParallelism": 5,
  "name": "MySkill",
  "context": "/document/mycomplex
  "inputs": [
    {
      "name": "text",
      "source": "/document/content"
    }
  ],
  "outputs": [
    {
      "name": "field1",
      "targetName": "field1"
    },
    {
      "name": "field2",
      "targetName": "field2"
    },
    {
      "name": "field3",
      "targetName": "field3"
    }
  ]
}

Я попытался несколько вариантов, Примечательно использование ShaperSkill с каждым полем в качестве входа и выходом "targetName" как "mycomplex" (с соответствующим контекстом).

Indexer

Вот отображение выходного поля индексатора для навыка :

{
  "sourceFieldName": "/document/mycomplex,
  "targetFieldName": "mycomplex"
}

Я пробовал несколько вариантов, таких как "sourceFieldName": "/document/mycomplex/*.

Индекс поиска

И это поле целевого индекса:

{
  "name": "mycomplex",
  "type": "Edm.ComplexType",
  "fields": [
    {
      "name": "field1",
      "type": "Edm.Double",
      "retrievable": true,
      "filterable": true,
      "sortable": true,
      "facetable": false,
      "searchable": false
    },
    {
      "name": "field2",
      "type": "Edm.Double",
      "retrievable": true,
      "filterable": true,
      "sortable": true,
      "facetable": false,
      "searchable": false
    },
    {
      "name": "field3",
      "type": "Edm.Double",
      "retrievable": true,
      "filterable": true,
      "sortable": true,
      "facetable": false,
      "searchable": false
    }
  ]
}

Результат

Мой результат обычно похож на Could not map output field 'mycomplex' to search index. Check your indexer's 'outputFieldMappings' property..

1 Ответ

0 голосов
/ 09 апреля 2020

Это может быть ошибкой в ​​контексте вашего навыка. Вместо установки контекста на /document/mycomplex, вы можете попробовать установить его на /document? Затем вы можете добавить ShaperSkill с контекстом, также установленным на /document, и полем вывода будет mycomplex, чтобы сгенерировать ожидаемую сложную форму типа

Примеры навыков:

"skills":
[
{
  "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
  "uri": "https://myfunction.azurewebsites.com/api,
  "httpHeaders": {},
  "httpMethod": "POST",
  "timeout": "PT3M50S",
  "batchSize": 1,
  "degreeOfParallelism": 5,
  "name": "MySkill",
  "context": "/document"
  "inputs": [
    {
      "name": "text",
      "source": "/document/content"
    }
  ],
  "outputs": [
    {
      "name": "field1",
      "targetName": "field1"
    },
    {
      "name": "field2",
      "targetName": "field2"
    },
    {
      "name": "field3",
      "targetName": "field3"
    }
  ]
},
{
  "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
  "context": "/document",
  "inputs": [
    {
      "name": "field1",
      "source": "/document/field1"
    },
    {
      "name": "field2",
      "source": "/document/field2"
    },
    {
      "name": "field3",
      "source": "/document/field3"
    }
  ],
  "outputs": [
    {
      "name": "output",
      "targetName": "mycomplex"
    }
  ]
}
]

Пожалуйста, обратитесь к документации по Шейпер навык для уточнения.

...