Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Анализ текста ›Справочник по фильтрам токенов

Фильтр токенов с разделителями (Delimited payload token filter)

Старое название delimited_payload_filter устарело и не должно использоваться с новыми индексами. Используйте delimited_payload вместо него.

Разделяет поток токенов на токены и полезные данные (payloads) на основе указанного разделителя.

Например, вы можете использовать фильтр delimited_payload с разделителем |, чтобы разбить the|1 quick|2 fox|3 на токены the, quick и fox с соответствующими полезными данными 1, 2 и 3.

Этот фильтр использует DelimitedPayloadTokenFilter из Lucene.

Полезные данные (Payloads)

Полезные данные — это пользовательские двоичные данные, связанные с позицией токена и хранящиеся в виде кодированных в base64 байтов.

Elasticsearch по умолчанию не хранит полезные данные токенов. Чтобы хранить полезные данные, необходимо:

  • Установить параметр отображения term_vector в значение with_positions_payloads или with_positions_offsets_payloads для любого поля, хранящего полезные данные.
  • Использовать анализатор индекса, включающий фильтр delimited_payload

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

Пример

Следующий запрос API анализа использует фильтр delimited_payload с разделителем | по умолчанию, чтобы разбить the|0 brown|10 fox|5 is|0 quick|10 на токены и полезные данные.

GET _analyze
{
  "tokenizer": "whitespace",
  "filter": ["delimited_payload"],
  "text": "the|0 brown|10 fox|5 is|0 quick|10"
}

Фильтр генерирует следующие токены:

[ the, brown, fox, is, quick ]

Обратите внимание, что API анализа не возвращает сохраненные полезные данные. Для примера, который включает возвращаемые полезные данные, см. Возврат сохраненных полезных данных.

Добавление в анализатор

Следующий запрос API создания индекса использует фильтр delimited-payload для настройки нового настраиваемого анализатора.

PUT delimited_payload
{
  "settings": {
    "analysis": {
      "analyzer": {
        "whitespace_delimited_payload": {
          "tokenizer": "whitespace",
          "filter": [ "delimited_payload" ]
        }
      }
    }
  }
}

Настраиваемые параметры

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

(Необязательно, строка) Тип данных для хранимых полезных данных. Допустимые значения:

float
(По умолчанию) Float
identity
Символы
int
Целое число

Настройка и добавление в анализатор

Чтобы настроить фильтр delimited_payload, продублируйте его, чтобы создать основу для нового настраиваемого фильтра токенов. Вы можете изменить фильтр, используя его настраиваемые параметры.

Например, следующий запрос API создания индекса использует настраиваемый фильтр delimited_payload для настройки нового настраиваемого анализатора. Настраиваемый фильтр delimited_payload использует разделитель + для разделения токенов и полезных данных. Полезные данные закодированы как целые числа.

PUT delimited_payload_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "whitespace_plus_delimited": {
          "tokenizer": "whitespace",
          "filter": [ "plus_delimited" ]
        }
      },
      "filter": {
        "plus_delimited": {
          "type": "delimited_payload",
          "delimiter": "+",
          "encoding": "int"
        }
      }
    }
  }
}

Возврат сохраненных полезных данных

Используйте API создания индекса, чтобы создать индекс, который:

  • Включает поле, которое хранит векторы терминов с полезными данными.
  • Использует настраиваемый анализатор индекса с фильтром delimited_payload.
PUT text_payloads
{
  "mappings": {
    "properties": {
      "text": {
        "type": "text",
        "term_vector": "with_positions_payloads",
        "analyzer": "payload_delimiter"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "payload_delimiter": {
          "tokenizer": "whitespace",
          "filter": [ "delimited_payload" ]
        }
      }
    }
  }
}

Добавьте документ, содержащий полезные данные, в индекс.

POST text_payloads/_doc/1
{
  "text": "the|0 brown|3 fox|4 is|0 quick|10"
}

Используйте API терм-векторов, чтобы вернуть токены документа и закодированные в base64 полезные данные.

GET text_payloads/_termvectors/1
{
  "fields": [ "text" ],
  "payloads": true
}

API возвращает следующий ответ:

{
  "_index": "text_payloads",
  "_type": "_doc",
  "_id": "1",
  "_version": 1,
  "found": true,
  "took": 8,
  "term_vectors": {
    "text": {
      "field_statistics": {
        "sum_doc_freq": 5,
        "doc_count": 1,
        "sum_ttf": 5
      },
      "terms": {
        "brown": {
          "term_freq": 1,
          "tokens": [
            {
              "position": 1,
              "payload": "QEAAAA=="
            }
          ]
        },
        "fox": {
          "term_freq": 1,
          "tokens": [
            {
              "position": 2,
              "payload": "QIAAAA=="
            }
          ]
        },
        "is": {
          "term_freq": 1,
          "tokens": [
            {
              "position": 3,
              "payload": "AAAAAA=="
            }
          ]
        },
        "quick": {
          "term_freq": 1,
          "tokens": [
            {
              "position": 4,
              "payload": "QSAAAA=="
            }
          ]
        },
        "the": {
          "term_freq": 1,
          "tokens": [
            {
              "position": 0,
              "payload": "AAAAAA=="
            }
          ]
        }
      }
    }
  }
}

© 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/analysis-delimited-payload-tokenfilter.html

Spec-Zone.ru

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