Индексатор когнитивного поиска Azure индексирует из хранилища BLOB-объектов, но не удаляет разметку XML-содержимого.

Как сказано в заголовке, я пытаюсь проиндексировать XML-файлы из хранилища BLOB-объектов с помощью индексатора, однако проиндексированные файлы по-прежнему содержат разметку XML, а не анализируются и удаляются из тегов.

Следующий XML - это пример XML-кода, который я пытаюсь проиндексировать:

<article xmlns="http://ournamespace.com/ns/test" xmlns:xlink="http://www.w3.org/1999/xlink">
  <title>Lorem ipsum</title>
  <section>
    <para> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. (<link xlink:href="f8c79a4d-f1f1-4d8d-ab4c-d9317754465e"> Ut enim ad minim veniam</link>).  quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</para>
      </section>
  <section>
    <title>
      <emphasis role="strong"> Duis aute irure dolor in reprehenderit in voluptate velit esse</emphasis>
    </title>
    <itemizedlist mark="square">
      <listitem>
        <para>
          <link xlink:href="d1cce80e-835f-4b37-892e-54bba282f437">cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt</link> in culpa qui officia deserunt mollit anim id est laborum. </para>
      </listitem>
    </itemizedlist>
  </section>
</article>

Я убедился, что тип содержимого большого двоичного объекта - application/xml, а режим анализа индексатора - default, поскольку я читал в этот вопрос, что это очень важно для правильного анализа документа.

Это конфигурация индексатора:

{
    "@odata.context": "https://<redacted>.search.windows.net/$metadata#indexers/$entity",
    "@odata.etag": "\"0x8D7D7C7CF735BF4\"",
    "name": "azureblob-indexer",
    "description": "",
    "dataSourceName": "blob-indexer",
    "skillsetName": null,
    "targetIndexName": "<redacted>-index",
    "disabled": null,
    "schedule": null,
    "parameters": {
        "batchSize": null,
        "maxFailedItems": 0,
        "maxFailedItemsPerBatch": 0,
        "base64EncodeKeys": null,
        "configuration": {
            "dataToExtract": "contentAndMetadata",
            "parsingMode": "default"
        }
    },
    "fieldMappings": [
        {
            "sourceFieldName": "metadata_storage_path",
            "targetFieldName": "metadata_storage_path",
            "mappingFunction": {
                "name": "base64Encode"
            }
        },
        {
            "sourceFieldName": "Subscriptions",
            "targetFieldName": "Subscriptions",
            "mappingFunction": {
                "name": "jsonArrayToStringCollection"
            }
        }
    ],
    "outputFieldMappings": [],
    "cache": null
}

В проиндексированном документе отображаются следующие метаданные, которые я считаю странными, поскольку content_type внезапно меняется с одного типа на другой. Я предполагаю, что это означает, что для этого документа использовался режим анализа text?

{
   "metadata_storage_content_type": "application/xml",
   "metadata_content_encoding": "UTF-8",
   "metadata_content_type": "text/plain; charset=UTF-8"
}

Это информация об одном из индексируемых BLOB-объектов:

LAST MODIFIED               4/2/2020, 3:28:13 PM
CREATION TIME               4/2/2020, 3:28:13 PM
TYPE                        Block blob
SIZE                        27.94 KiB
ACCESS TIER Hot (Inferred)
ACCESS TIER LAST MODIFIED   N/A
SERVER ENCRYPTED            true
ETAG                        0x8D7D709B1C7C5D5
CONTENT-TYPE                application/xml
CONTENT-MD5                 3yeFKKcSGh/6DJawrAWaWg==
LEASE STATUS                Unlocked
LEASE STATE                 Available
LEASE DURATION              -
COPY STATUS                 -
COPY COMPLETION TIME        -

Любая помощь будет принята с благодарностью, и я, конечно, готов предоставить дополнительную информацию, если это необходимо. заранее спасибо!


person Thavinc    schedule 03.04.2020    source источник
comment
Непонятно, в чем проблема. Когда вы выполняете поиск по запросу ‹title› Lorem ipsum ‹/title›, возвращает ли он документ?   -  person Thiago Custodio    schedule 03.04.2020
comment
Он возвращает документ, но согласно эта статья Файлы XML должны автоматически очищаться от разметки, а текст должен быть извлечен.   -  person Thavinc    schedule 03.04.2020
comment
сделайте тест и найдите Lorem ipsum (пока игнорируйте теги) и проверьте, вернет ли он что-то   -  person Thiago Custodio    schedule 03.04.2020
comment
Он действительно возвращает результат поиска, который я ожидал получить. Единственным недостатком является то, что, к сожалению, когда я ищу <title>, он также возвращает контент, хотя я ожидал, что это не вернет результат после ссылки на вышеупомянутую статью. Также было бы очень хорошо, если бы контент был лишен тегов, поскольку мы индексируем около пары тысяч статей, каждая из которых может легко содержать 2000 слов, и, таким образом, это сэкономит много места. Я подумал о некоторых обходных путях, таких как сохранение двух копий в BLOB-объекте, например, с тегами и без тегов, но я бы предпочел, чтобы индексатор позаботился об этом.   -  person Thavinc    schedule 06.04.2020
comment
Мне кажется, он работает правильно. Индексаторы не изменяют содержимое индексируемого документа. Если это то, чего вы ожидали, вам придется сделать это самостоятельно, поскольку анализаторы используются только для извлечения терминов.   -  person Thiago Custodio    schedule 06.04.2020
comment
Хорошо, спасибо. Затем я разделю свое хранилище BLOB-объектов на два контейнера; один для документов XML и один для необработанного текста в документах.   -  person Thavinc    schedule 07.04.2020
comment
вы пробовали добавлять инструкции по обработке xml в свои xml-документы? ‹? Xml version = 1.0 encoding = UTF-8?›   -  person Erkan    schedule 20.01.2021