Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›REST API ›Документы API

API векторов терминов

Возвращает информацию и статистику по терминам в полях конкретного документа.

GET /my-index-000001/_termvectors/1

Запрос

GET /<index>/_termvectors/<_id>

Предварительные условия

  • Если включены функции безопасности Elasticsearch, у вас должна быть read привилегия индекса для целевого индекса или псевдонима индекса.

Описание

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

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

GET /my-index-000001/_termvectors/1?fields=message

Поля могут быть указаны с использованием подстановочных знаков, аналогично запросу multi match.

Векторы терминов по умолчанию являются режим реального времени, а не околорежимного реального времени. Это можно изменить, установив параметр realtime на false.

Вы можете запросить три типа значений: информацию о терминах, статистику терминов и статистику полей. По умолчанию возвращается вся информация о терминах и статистика по полям для всех полей, но статистика терминов исключается.

Информация о терминах

  • частота термина в поле (всегда возвращается)
  • позиции терминов (positions : true)
  • начальные и конечные смещения (offsets : true)
  • полезные данные терминов (payloads : true), как байты, закодированные в base64

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

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

Статистика терминов

Установка term_statistics на true (по умолчанию false) вернёт

  • общую частоту термина (как часто встречается термин во всех документах)
  • частоту документа (количество документов, содержащих текущий термин)

По умолчанию эти значения не возвращаются, так как статистика терминов может серьёзно повлиять на производительность.

Статистика полей

Установка field_statistics на false (по умолчанию true) исключит:

  • количество документов (сколько документов содержат это поле)
  • сумма частот документов (сумма частот документов для всех терминов в этом поле)
  • сумма общих частот терминов (сумма общих частот каждого термина в этом поле)

Фильтр терминов

С помощью параметра filter возвращаемые термины также могут быть отфильтрованы на основе их tf-idf-оценок. Это может быть полезно для определения хорошего характерного вектора документа. Эта функция работает аналогично второму этапу запроса More Like This. См. пример 5 для использования.

Поддерживаются следующие подпараметры:

max_num_terms

Максимальное количество терминов, которые должны быть возвращены на поле. По умолчанию 25.

min_term_freq

Игнорировать слова с частотой меньше этой в исходном документе. По умолчанию 1.

max_term_freq

Игнорировать слова с частотой больше этой в исходном документе. По умолчанию неограничено.

min_doc_freq

Игнорировать термины, которые не встречаются как минимум в таком количестве документов. По умолчанию 1.

max_doc_freq

Игнорировать слова, которые встречаются в большем количестве документов. По умолчанию неограничено.

min_word_length

Минимальная длина слова, ниже которой слова будут игнорироваться. По умолчанию 0.

max_word_length

Максимальная длина слова, выше которой слова будут игнорироваться. По умолчанию неограничено (0).

Поведение

Статистика терминов и полей не точна. Удаленные документы не учитываются. Информация извлекается только для фрагмента, в котором находится запрашиваемый документ. Поэтому статистика терминов и полей полезна только как относительные значения, а абсолютные числа не имеют смысла в этом контексте. По умолчанию, когда запрашиваются векторы терминов искусственных документов, фрагмент для получения статистики выбирается случайным образом. Используйте routing только для попадания в определённый фрагмент.

Параметры пути

<index>
(Обязательный, строка) Название индекса, который содержит документ.
<_id>
(Необязательный, строка) Уникальный идентификатор документа.

Параметры запроса

fields

(Необязательный, строка) Список полей, разделенных запятыми, или выражения с подстановочными знаками для включения в статистику.

Используется в качестве списка по умолчанию, если в параметрах completion_fields или fielddata_fields не указан конкретный список полей.

field_statistics
(Необязательный, логическое значение) Если true, в ответ включаются количество документов, сумма частот документов и сумма общих частот терминов. По умолчанию true.
<offsets>
(Необязательный, логическое значение) Если true, в ответ включаются смещения терминов. По умолчанию true.
payloads
(Необязательный, логическое значение) Если true, в ответ включаются полезные данные терминов. По умолчанию true.
positions
(Необязательный, логическое значение) Если true, в ответ включаются позиции терминов. По умолчанию true.
preference
(Необязательный, строка) Указывает узел или фрагмент, на котором должна выполняться операция. По умолчанию случайный.
routing
(Необязательный, строка) Пользовательское значение, используемое для маршрутизации операций на определённый фрагмент.
realtime
(Необязательный, логическое значение) Если true, запрос выполняется в режиме реального времени, а не в режиме околореального времени. По умолчанию true. См. Режим реального времени.
term_statistics
(Необязательный, логическое значение) Если true, в ответ включаются частота термина и частота документа. По умолчанию false.
version
(Необязательный, логическое значение) Если true, возвращает версию документа как часть результата.
version_type
(Необязательный, перечисление) Конкретный тип версии: external, external_gte.

Примеры

Возврат сохранённых векторных представлений терминов

Сначала создадим индекс, хранящий векторные представления терминов, полезные данные и т.д.:

PUT /my-index-000001
{ "mappings": {
    "properties": {
      "text": {
        "type": "text",
        "term_vector": "with_positions_offsets_payloads",
        "store" : true,
        "analyzer" : "fulltext_analyzer"
       },
       "fullname": {
        "type": "text",
        "term_vector": "with_positions_offsets_payloads",
        "analyzer" : "fulltext_analyzer"
      }
    }
  },
  "settings" : {
    "index" : {
      "number_of_shards" : 1,
      "number_of_replicas" : 0
    },
    "analysis": {
      "analyzer": {
        "fulltext_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": [
            "lowercase",
            "type_as_payload"
          ]
        }
      }
    }
  }
}

Затем добавим некоторые документы:

PUT /my-index-000001/_doc/1
{
  "fullname" : "John Doe",
  "text" : "test test test "
}

PUT /my-index-000001/_doc/2?refresh=wait_for
{
  "fullname" : "Jane Doe",
  "text" : "Another test ..."
}

Следующий запрос возвращает всю информацию и статистику для поля text в документе 1 (John Doe):

GET /my-index-000001/_termvectors/1
{
  "fields" : ["text"],
  "offsets" : true,
  "payloads" : true,
  "positions" : true,
  "term_statistics" : true,
  "field_statistics" : true
}

Ответ:

{
  "_index": "my-index-000001",
  "_type": "_doc",
  "_id": "1",
  "_version": 1,
  "found": true,
  "took": 6,
  "term_vectors": {
    "text": {
      "field_statistics": {
        "sum_doc_freq": 4,
        "doc_count": 2,
        "sum_ttf": 6
      },
      "terms": {
        "test": {
          "doc_freq": 2,
          "ttf": 4,
          "term_freq": 3,
          "tokens": [
            {
              "position": 0,
              "start_offset": 0,
              "end_offset": 4,
              "payload": "d29yZA=="
            },
            {
              "position": 1,
              "start_offset": 5,
              "end_offset": 9,
              "payload": "d29yZA=="
            },
            {
              "position": 2,
              "start_offset": 10,
              "end_offset": 14,
              "payload": "d29yZA=="
            }
          ]
        }
      }
    }
  }
}

Генерация векторных представлений терминов на лету

Векторные представления терминов, которые не хранятся явно в индексе, вычисляются автоматически на лету. Следующий запрос возвращает всю информацию и статистику для полей документа 1, даже если термины не были явно сохранены в индексе. Обратите внимание, что для поля text термины не перегенерируются.

GET /my-index-000001/_termvectors/1
{
  "fields" : ["text", "some_field_without_term_vectors"],
  "offsets" : true,
  "positions" : true,
  "term_statistics" : true,
  "field_statistics" : true
}

Искусственные документы

Векторные представления терминов также могут быть сгенерированы для искусственных документов, то есть для документов, отсутствующих в индексе. Например, следующий запрос вернёт те же результаты, что и в примере 1. Используемое отображение определяется параметром index.

Если динамическое отображение включено (по умолчанию), поля документов, отсутствующие в исходном отображении, будут динамически созданы.

GET /my-index-000001/_termvectors
{
  "doc" : {
    "fullname" : "John Doe",
    "text" : "test test test"
  }
}
Анализатор на уровне поля

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

GET /my-index-000001/_termvectors
{
  "doc" : {
    "fullname" : "John Doe",
    "text" : "test test test"
  },
  "fields": ["fullname"],
  "per_field_analyzer" : {
    "fullname": "keyword"
  }
}

Ответ:

{
  "_index": "my-index-000001",
  "_type": "_doc",
  "_version": 0,
  "found": true,
  "took": 6,
  "term_vectors": {
    "fullname": {
       "field_statistics": {
          "sum_doc_freq": 2,
          "doc_count": 4,
          "sum_ttf": 4
       },
       "terms": {
          "John Doe": {
             "term_freq": 1,
             "tokens": [
                {
                   "position": 0,
                   "start_offset": 0,
                   "end_offset": 8
                }
             ]
          }
       }
    }
  }
}

Фильтрация терминов

Наконец, возвращаемые термины можно отфильтровать на основе их значений tf-idf. В примере ниже мы получаем три наиболее «интересных» ключевых слова из искусственного документа с заданным значением поля «сюжет». Обратите внимание, что ключевое слово «Тони» или любые стоп-слова не являются частью ответа, так как их tf-idf, вероятно, слишком низкий.

GET /imdb/_termvectors
{
  "doc": {
    "plot": "When wealthy industrialist Tony Stark is forced to build an armored suit after a life-threatening incident, he ultimately decides to use its technology to fight against evil."
  },
  "term_statistics": true,
  "field_statistics": true,
  "positions": false,
  "offsets": false,
  "filter": {
    "max_num_terms": 3,
    "min_term_freq": 1,
    "min_doc_freq": 1
  }
}

Ответ:

{
   "_index": "imdb",
   "_type": "_doc",
   "_version": 0,
   "found": true,
   "term_vectors": {
      "plot": {
         "field_statistics": {
            "sum_doc_freq": 3384269,
            "doc_count": 176214,
            "sum_ttf": 3753460
         },
         "terms": {
            "armored": {
               "doc_freq": 27,
               "ttf": 27,
               "term_freq": 1,
               "score": 9.74725
            },
            "industrialist": {
               "doc_freq": 88,
               "ttf": 88,
               "term_freq": 1,
               "score": 8.590818
            },
            "stark": {
               "doc_freq": 44,
               "ttf": 47,
               "term_freq": 1,
               "score": 9.272792
            }
         }
      }
   }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docs-termvectors.html

END_OF_DOCUMENT_MARKER

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API