Поделиться через


Поиск в содержимом вложения статьи базы знаний

Можно использовать вложение статьи базы знаний для включения загружаемых файлов в статьи базы знаний. Можно также использовать веб-файлы для создания страниц вопросов и ответов с загружаемым содержимым.

Внимание

Поиск возможен только в файлах, которые прикреплены к статьям базы знаний. Поиск в файлах, которые прикреплены к веб-файлам, невозможен.

Можно настроить сайт Power Pages, чтобы позволить пользователям выполнять поиск в содержимом вложений статей базы знаний. Это помогает пользователям находить информацию, которую они хотят найти.

В статьях базы знаний индексируются любые вложения с определенным префиксом.

Для индексации вложений статьи базы знаний необходимо создать следующие параметры сайта и установить для них значение True:

Параметр сайта Описание
Search/IndexNotesAttachments Указывает, требуется ли индексация содержимого вложений в статьях базы знаний. По умолчанию установлено значение False.
KnowledgeManagement/DisplayNotes Указывает, требуется ли отображать вложения статей базы знаний. По умолчанию установлено значение False.

При поиске термина результаты поиска также включают вложения. Если условие поиска соответствует вложению статьи базы знаний, ссылка на соответствующую статью базы знаний также предоставляется. Чтобы посмотреть загружаемые вложения, выберите Загрузки в разделе Тип записей в левой панели. Чтобы изменить подпись Загрузки, измените фрагмент содержимого Search/Facet/Downloads. По умолчанию задано значение Загрузки.

Заметка

Поиск Dataverse должен быть включен в вашей среде, чтобы использовать эту функцию.

Поиск во вложениях статей базы знаний

Если ваш сайт использует поиск Lucene .NET, вы можете разрешить поиск во вложениях статей базы знаний на веб-сайте, установив для параметра Синхронизация вложений в статьи базы знаний с сайтом значение Да в центре администрирования Dynamics 365 Customer Service или в приложении "Центр обслуживания клиентов". Вам не нужно настраивать этот параметр, если на вашем сайте используется поиск Dataverse. По умолчанию вы сможете выполнять поиск во вложениях к статьям базы знаний.

Это позволит поиску просматривать вложения статей базы знаний и предоставлять простой доступ к информации для потребителей знаний. Благодаря этой новой возможности вложения вам больше не нужно будет использовать вложения заметок для сайта. Вложения статьи базы знаний будут автоматически синхронизироваться с соответствующим вложением заметок. Дополнительные сведения: Обновление вложений статей базы знаний для портала

Обновление конфигураций сайта

Если у вас уже имелся веб-сайт до апреля 2018 и вы обновили сайт до последней версии, необходимо использовать следующие конфигурации, чтобы пользовательский интерфейс был таким же, как и при новой установке.

Фрагменты содержимого

Чтобы изменить подписи, отображаемые в результатах поиска для аннотаций и загрузок веб-файлов, создайте фрагмент содержимого Search/Facet/Downloads, затем задайте для него требуемое значение. По умолчанию используется значение Загрузки.

Веб-шаблоны

Веб-шаблон "Фасетный поиск — шаблон результатов" пересмотрен для отображения файлов, связанных со статьями базы знаний в качестве основных элементов результата поиска с соответствующей ссылкой на статью. Необходимо обновить "Фасетный поиск — шаблон результатов" до следующего источника:

{% assign openTag = '{{' %}
{% assign closingTag = '}}' %}
{%raw%}
  <script id="search-view-results" type="text/x-handlebars-template">
    {{#if items}}
      <div class="page-header">
        <h2>{%endraw%}{{openTag}} stringFormat "{{ resx.Search_Results_Format_String }}" firstResultNumber lastResultNumber itemCount {{closingTag}}{%raw%}
          <em class="querytext">{{{query}}}</em>
          {{#if isResetVisible}}
            <a class="btn btn-default btn-sm facet-clear-all" role="button" title="{%endraw%}{{ snippets['Search/Facet/ClearConstraints'] | default: res['Search_Filter_Clear_All'] }}{%raw%}" tabIndex="0">{%endraw%}{{ snippets['Search/Facet/ClearConstraints'] | default: res['Search_Filter_Clear_All'] }}{%raw%}</a>
          {{/if}}
        </h2>
      </div>
      <ul>
        {{#each items}}
          <li>
            <h3><a title="{{title}}" href="{{url}}">{{#if parent}}<span class="glyphicon glyphicon-file pull-left text-muted" aria-hidden="true"></span>{{/if}}{{title}}</a></h3>
            <p class="fragment">{{{fragment}}}</p>
            {{#if parent}}
              <p class="small related-article">{%endraw%}{{ resx.Related_Article }}{%raw%}: <a title="{{parent.title}}" href="{{parent.absoluteUrl}}">{{parent.title}}</a></p>
            {{/if}}
            <ul class="note-group small list-unstyled">
            {{#if relatedNotes}}
              {{#each relatedNotes}}
                <li class="note-item">
                  {{#if isImage}}
                    <a target="_blank" title="{{title}}" href="{{absoluteUrl}}"><span class="glyphicon glyphicon-file" aria-hidden="true"></span>&nbsp;{{title}}</a>
                  {{else}}
                    <a title="{{title}}" href="{{absoluteUrl}}"><span class="glyphicon glyphicon-file" aria-hidden="true"></span>&nbsp;{{title}}</a>
                  {{/if}}
                  <p class="fragment text-muted">{{{fragment}}}</p>
                </li>
              {{/each}}
            {{/if}}
            {{#if relatedAttachments}}
              {{#each relatedAttachments}}
                <li class="note-item">
                  {{#if isImage}}
                    <a id="kbattachment-{{entityID}}" href="javascript:downloadKbAttachmentFile('kbattachment-{{entityID}}', '{{title}}', {{fileSize}}, '{{fileType}}', '{{downloadBlockUrl}}', '{{initializeDownloadUrl}}')"><span class="glyphicon glyphicon-file" aria-hidden="true"></span>&nbsp;{{title}}</a>
                  {{else}}
                    <a id="kbattachment-{{entityID}}" title="{{title}}" href="javascript:downloadKbAttachmentFile('kbattachment-{{entityID}}', '{{title}}', {{fileSize}}, '{{fileType}}', '{{downloadBlockUrl}}', '{{initializeDownloadUrl}}')"><span class="glyphicon glyphicon-file" aria-hidden="true"></span>&nbsp;{{title}}</a>
                  {{/if}}
                  <p class="fragment text-muted">{{{fragment}}}</p>
                </li>
              {{/each}}
            {{/if}}
            </ul>
          </li>
        {{/each}}
      </ul>
    {{else}}
      <h2>{%endraw%}{{ resx.Search_No_Results_Found }}{%raw%}<em class="querytext">{{{query}}}</em>
        {{#if isResetVisible}}
          <a class="btn btn-default btn-sm facet-clear-all" role="button" title="{%endraw%}{{ snippets['Search/Facet/ClearConstraints'] | default: res['Search_Filter_Clear_All'] }}{%raw%}" tabIndex="0">{%endraw%}{{ snippets['Search/Facet/ClearConstraints'] | default: res['Search_Filter_Clear_All'] }}{%raw%}</a>
        {{/if}}
      </h2>
   {{/if}}
  </script>
  <script type="text/javascript">
    function downloadKbAttachmentFile(attachmentElementId, fileName, fileSize, mimeType, downloadBlockUrl, initializeUrl) {
      // Download block API supports max 4MB block size
      const blockSizeInBytes = 4096 * 1024;
      const totalNumberOfBlocks = parseInt(fileSize / blockSizeInBytes + 1);
      var fileContinuationToken = "";
      var contentString = "";
      var numberOfBlocksDownloaded = 0;
      var blockNumberToContentMap = {};
      function downloadBlockCallback(i, result) {
        numberOfBlocksDownloaded++;
        blockNumberToContentMap[i] = result;
        if (numberOfBlocksDownloaded == totalNumberOfBlocks) {
          for (var j = 0; j < totalNumberOfBlocks; j++) {
            contentString += blockNumberToContentMap[j];
          }
          var isImage = mimeType.startsWith('image/');
          const attachmentElement = document.getElementById(attachmentElementId);
          if (isImage) {
            const bodyByteString = atob(contentString);
            const bodyBuffer = new ArrayBuffer(bodyByteString.length);
            const bodyView = new Uint8Array(bodyBuffer);
            for (var k = 0; k < bodyByteString.length; k++) {
              bodyView[k] = bodyByteString.charCodeAt(k);
            }
            var imageUrl = URL.createObjectURL(new Blob([bodyBuffer], { type: mimeType }));
            attachmentElement.href = imageUrl;
            attachmentElement.target = "_blank";
          }
          else {
            const linkSource = 'data:' + mimeType + ';base64,' + contentString;
            attachmentElement.href = linkSource;
            attachmentElement.download = fileName;
          }
          attachmentElement.click();
        }
      }
      shell.ajaxSafePost({
        type: 'GET',
        url: initializeUrl,
        success: function (result) {
          fileContinuationToken = encodeURIComponent(result);
          for (var i = 0; i < totalNumberOfBlocks; i++) {
            url = downloadBlockUrl + "&blockNumber=" + i + "&fileContinuationToken=" + fileContinuationToken + "&blockSize=" + blockSizeInBytes;
            var x = downloadBlockCallback.bind(this,i);
            shell.ajaxSafePost({
              type: 'GET',
              url: url,
              success: (result) => { x(result) }
            });
          }
        }
      });
    }
  </script>
{%endraw%}

Параметры сайта

Необходимо добавить значение \_logicalname:annotation~0.9^0.25 в параметр сайта Search/Query. После добавления значение должно быть следующее:

+(@Query) \_title:(@Query) \_logicalname:knowledgearticle~0.9^0.3 \_logicalname:annotation~0.9^0.25 \_logicalname:adx_webpage~0.9^0.2 -\_logicalname:adx_webfile~0.9 adx_partialurl:(@Query) \_logicalname:adx_blogpost~0.9^0.1 -\_logicalname:adx_communityforumthread~0.9

Чтобы настроить фасетки для группирования заметкой, связанных со статьями базы знаний и веб-файлами в одну фасетку, измените имя параметра сайта Search/RecordTypeFacetsEntities и добавьте ;Downloads:annotation,adx_webfile к его значению.

Чтобы позволить вложениям, связанным со статьями базы знаний, появляться на веб-сайте и в результатах поиска, измените параметр сайта KnowledgeManagement/DisplayNotes и задайте для него значение True. Параметр сайта KnowledgeManagement/NotesFilter содержит значение префикса, которое необходимо добавить в начало поля текста примечания в примечаниях; только примечания с указанным значением префикса будут отображаться на веб-странице. По умолчанию значение равно *WEB*, однако его можно изменить с помощью параметра сайта.

Для включения индексирования файловых вложений, связанных с примечаниями, создайте параметр сайта Search/IndexNotesAttachments и установите для него значение True.