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

Фильтр токенов Flatten graph

Сглаживает график токенов, созданный фильтром токенов graph, например, synonym_graph или word_delimiter_graph.

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

Сглаживание графиков — это процесс с потерей информации.

Если возможно, избегайте использования фильтра flatten_graph. Вместо этого используйте фильтры токенов graph только в анализаторах поиска. Это устраняет необходимость в применении фильтра flatten_graph.

Фильтр flatten_graph использует FlattenGraphFilter из Lucene.

Пример

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

Следующий запрос API анализа использует фильтр synonym_graph, чтобы добавить internet phonebook как синоним с несколькими позициями для domain name system в тексте domain name system is fragile:

GET /_analyze
{
  "tokenizer": "standard",
  "filter": [
    {
      "type": "synonym_graph",
      "synonyms": [ "internet phonebook, domain name system" ]
    }
  ],
  "text": "domain name system is fragile"
}

Фильтр создаёт следующий график токенов с internet phonebook в качестве токена с несколькими позициями.

token graph dns synonym ex2

Индексирование не поддерживает графики токенов, содержащие токены с несколькими позициями. Чтобы сделать этот график токенов подходящим для индексирования, его необходимо сгладить.

Чтобы сгладить график токенов, добавьте фильтр flatten_graph после фильтра synonym_graph в предыдущем запросе к API анализа.

GET /_analyze
{
  "tokenizer": "standard",
  "filter": [
    {
      "type": "synonym_graph",
      "synonyms": [ "internet phonebook, domain name system" ]
    },
    "flatten_graph"
  ],
  "text": "domain name system is fragile"
}

Фильтр производит следующий сглаженный график токенов, подходящий для индексирования.

token graph dns synonym flattened ex2

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

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

В этом анализаторе пользовательский фильтр word_delimiter_graph создаёт графики токенов, содержащие соединённые токены с несколькими позициями. Фильтр flatten_graph сглаживает эти графики токенов, делая их пригодными для индексирования.

resp = client.indices.create(
    index="my-index-000001",
    settings={
        "analysis": {
            "analyzer": {
                "my_custom_index_analyzer": {
                    "type": "custom",
                    "tokenizer": "standard",
                    "filter": [
                        "my_custom_word_delimiter_graph_filter",
                        "flatten_graph"
                    ]
                }
            },
            "filter": {
                "my_custom_word_delimiter_graph_filter": {
                    "type": "word_delimiter_graph",
                    "catenate_all": True
                }
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      analysis: {
        analyzer: {
          my_custom_index_analyzer: {
            type: 'custom',
            tokenizer: 'standard',
            filter: [
              'my_custom_word_delimiter_graph_filter',
              'flatten_graph'
            ]
          }
        },
        filter: {
          my_custom_word_delimiter_graph_filter: {
            type: 'word_delimiter_graph',
            catenate_all: true
          }
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  settings: {
    analysis: {
      analyzer: {
        my_custom_index_analyzer: {
          type: "custom",
          tokenizer: "standard",
          filter: ["my_custom_word_delimiter_graph_filter", "flatten_graph"],
        },
      },
      filter: {
        my_custom_word_delimiter_graph_filter: {
          type: "word_delimiter_graph",
          catenate_all: true,
        },
      },
    },
  },
});
console.log(response);
PUT /my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_index_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "my_custom_word_delimiter_graph_filter",
            "flatten_graph"
          ]
        }
      },
      "filter": {
        "my_custom_word_delimiter_graph_filter": {
          "type": "word_delimiter_graph",
          "catenate_all": true
        }
      }
    }
  }
}

© 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/8.17/analysis-flatten-graph-tokenfilter.html

Spec-Zone.ru

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