Azure Search의 필드 매핑에서 metadata_storage_path에서 원시 URL을 검색하는 방법

소개



Azure BLOB 스토리지에 pdf 파일 등을 업로드하고 Azure Search에서 인덱싱하면 파일의 전체 텍스트 검색을 수행할 수 있습니다. 이를 응용하여 파일을 검색하거나 파일을 다운로드할 수 있는 웹사이트 구축도 가능합니다. 서비스 작성에 있어서, 필자가 가장 빠져 버린 곳이, metadata_storage_path(Blob의 링크가 base64로 변환된 데이터)의 가공입니다. 이 작업을 수행하지 않으면 원시 URL을 검색하지 않고 HTML에서 하이퍼링크를 설치할 수 없습니다. 코드 측이 아니라 Azure Search상에서 어떻게든 가공할 수 없을까 생각해 트라이한 결과가 이쪽이 됩니다. MS 공식 문서에 방법은 쓰고 있습니다만, 조금 알기 어렵기 때문에, 본 기사에서 정리하기로 했습니다.

(공식: htps : // / cs. 미 c 로소 ft. 코 m / 자 jp / 아즈레 / 세아 rch / 세아 rch- )

Azure Search 및 Storage Account(BLOB) 배포



이쪽의 순서에 대해서는, 생략하겠습니다. 이 기사에서는 이미 일부 파일이 인덱싱되어 필드가 구성된 상태라고 가정합니다.

metadata_storage_path의 초기 상태↓


필드 추가



원시 URL을 저장하는 필드를 Azure Search에서 새로 추가합니다. 이번에는 예제로 "original_path"라는 필드를 "Retrievable"로 만들었습니다.



필드 매핑 설정



REST API를 사용하여 Azure Search에서 만든 인덱스의 필드 매핑을 설정합니다. 이번 API를 두드리는 도구로 Postman을 사용합니다.

● 먼저 현재 필드 매핑 정보를 GET합니다. 취득한 내용은 모두 메모장 등에 복사해 두십시오.


GET https://[search service name].search.windows.net/indexers/[my indexer name]?api-version=[api-version]
Content-Type: application/json
api-key: [admin key]

● 그런 다음 decode를 수행합니다. 방금 GET 한 JSON을 바탕으로 다음 body를 PUT하십시오 (복자 등은 적절히 바꾸십시오).
{
"@odata.context": "https://XXXXX.search.windows.net/$metadata#indexers/$entity",
    "@odata.etag": "\"0x8D60D553BE516BF\"",
    "name": "YYYYY",
    "description": "",
    "dataSourceName": "ZZZZZ",
    "targetIndexName": "WWWWW",
    "schedule": null,
    "parameters": {
        "batchSize": null,
        "maxFailedItems": 0,
        "maxFailedItemsPerBatch": 0,
        "base64EncodeKeys": false,
        "configuration": {
            "dataToExtract": "contentAndMetadata"
        }
    },
   "fieldMappings" : [
   {
    "sourceFieldName" : "metadata_storage_path",
    "targetFieldName" : "metadata_storage_path",
    "mappingFunction" : { "name" : "base64Decode", "parameters" : { "useHttpServerUtilityUrlTokenDecode" : false } }
   }],

    "disabled": null
}

● 그런 다음 필드를 포크합니다. GET 한 JSON을 바탕으로 다음 body를 PUT하십시오 (복자 등은 적절히 바꾸십시오).
{
"@odata.context": "https://XXXXX.search.windows.net/$metadata#indexers/$entity",
    "@odata.etag": "\"0x8D60D553BE516BF\"",
    "name": "YYYYY",
    "description": "",
    "dataSourceName": "ZZZZZ",
    "targetIndexName": "WWWWW",
    "schedule": null,
    "parameters": {
        "batchSize": null,
        "maxFailedItems": 0,
        "maxFailedItemsPerBatch": 0,
        "base64EncodeKeys": false,
        "configuration": {
            "dataToExtract": "contentAndMetadata"
        }
    },
   "fieldMappings" : [
    { "sourceFieldName" : "metadata_storage_path", "mappingFunction" : { "name" : "base64Encode" } },
    { "sourceFieldName" : "metadata_storage_path", "targetFieldName" : "original_path" }
    ],

    "disabled": null
}

● 갱신된 필드 매핑의 정보를 GET 해 보면, 이하와 같이 되어 있을까 생각합니다.
{
"@odata.context": "https://XXXXX.search.windows.net/$metadata#indexers/$entity",
    "@odata.etag": "\"0x8D60E33753011E2\"",
    "name": "YYYYY",
    "description": "",
    "dataSourceName": "ZZZZZ",
    "targetIndexName": "WWWWW",
    "schedule": null,
    "parameters": {
        "batchSize": null,
        "maxFailedItems": 0,
        "maxFailedItemsPerBatch": 0,
        "base64EncodeKeys": false,
        "configuration": {
            "dataToExtract": "contentAndMetadata"
        }
    },
    "fieldMappings": [
        {
            "sourceFieldName": "metadata_storage_path",
            "targetFieldName": "metadata_storage_path",
            "mappingFunction": {
                "name": "base64Encode",
                "parameters": null
            }
        },
        {
            "sourceFieldName": "metadata_storage_path",
            "targetFieldName": "original_path",
            "mappingFunction": null
        }
    ],
    "disabled": null
}

동작 확인



필드 매핑을 업데이트한 후 BLOB Storage에 파일을 업로드하고 Azure Search에서 인덱싱하고 Blob URL을 검색할 수 있는지 확인해 보세요.



사이고에게



본 기사에서는 base64로 변환된 데이터인 metadata_storage_path의 변환 방법에 대해 소개했습니다. 등록한 필드 매핑이 반영되는 것은, 인덱싱시이므로, 신규로 인덱스를 작성할 때 등은 적용할 수 없는 방법으로 되어 있습니다. 다른 방법을 아시는 분이 있으면 꼭 교수 받을 수 있으면 다행입니다.

좋은 웹페이지 즐겨찾기