Как создать отображение поля в Azure Поиск со сложным targetField - PullRequest
2 голосов
/ 08 января 2020

Я использую индексатор поиска Azure для индексирования документов из MongoDB CosmosDB, которая содержит объекты с полями с именем _id. Поскольку Azure Поиск не допускает подчеркивания в начале имени поля в индексе, я хочу создать отображение поля.

JSON структура в Космосе -> структура в индексе

{
  "id": "test"
  "name": "test",
  "productLine": {
     "_id": "123",       --> "id": "123"
     "name": "test"
  }
}

Документация содержит именно этот сценарий в качестве примера , но только для поля верхнего уровня.

"fieldMappings" : [ { "sourceFieldName" : "_id", "targetFieldName" : "id" } ]}

Я пробовал следующее:

"fieldMappings" : [ { "sourceFieldName" : "productLine/_id", "targetFieldName" : "productLine/id" } ] }

, что приводит к ошибке:

Value is not accepted. Valid values: "doc_id", "name", "productName".

Как правильно создать сопоставление для целевого поля, которое является подполем?

1 Ответ

1 голос
/ 08 января 2020

Невозможно напрямую отобразить подполя. Вы можете обойти это, добавив Skillset с Shaper Cognitive Skill к indexer и отображение поля вывода .

Вам также нужно присоединить ресурс Cognitive Services к набору навыков. Скилл-мастер не получает счета , но при подключении ресурса Cognitive Services вы можете обрабатывать более 20 документов в день .

скилл-мастер

{
  "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
  "context": "/document",
  "inputs": [
    {
      "name": "id",
      "source": "/document/productLine/_id"
    },
    {
      "name": "name",
      "source": "/document/productLine/name"
    }
  ],
  "outputs": [
    {
      "name": "output",
      "targetName": "renamedProductLine"
    }
  ]
}

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

"skillsetName": <skillsetName>,
"outputFieldMappings": [
    {
        "sourceFieldName": "/document/renamedProductLine",
        "targetFieldName": "productLine"
    }
]
...