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

Фильтр токенов Keep words

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

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

Чтобы удалить список слов из потока токенов, используйте фильтр stop.

Пример

Следующий запрос API анализа использует фильтр keep, чтобы оставить только токены fox и dog из the quick fox jumps over the lazy dog.

resp = client.indices.analyze(
    tokenizer="whitespace",
    filter=[
        {
            "type": "keep",
            "keep_words": [
                "dog",
                "elephant",
                "fox"
            ]
        }
    ],
    text="the quick fox jumps over the lazy dog",
)
print(resp)
response = client.indices.analyze(
  body: {
    tokenizer: 'whitespace',
    filter: [
      {
        type: 'keep',
        keep_words: [
          'dog',
          'elephant',
          'fox'
        ]
      }
    ],
    text: 'the quick fox jumps over the lazy dog'
  }
)
puts response
const response = await client.indices.analyze({
  tokenizer: "whitespace",
  filter: [
    {
      type: "keep",
      keep_words: ["dog", "elephant", "fox"],
    },
  ],
  text: "the quick fox jumps over the lazy dog",
});
console.log(response);
GET _analyze
{
  "tokenizer": "whitespace",
  "filter": [
    {
      "type": "keep",
      "keep_words": [ "dog", "elephant", "fox" ]
    }
  ],
  "text": "the quick fox jumps over the lazy dog"
}

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

[ fox, dog ]

Конфигурируемые параметры

keep_words

(Обязательно*, массив строк) Список слов, которые нужно оставить. В выходные данные включаются только токены, соответствующие словам из этого списка.

Необходимо указать либо этот параметр, либо keep_words_path.

keep_words_path

(Обязательно*, массив строк) Путь к файлу, содержащему список слов, которые нужно оставить. В выходные данные включаются только токены, соответствующие словам из этого списка.

Этот путь должен быть абсолютным или относительным к расположению config, и файл должен быть закодирован в UTF-8. Каждое слово в файле должно разделяться новой строкой.

Необходимо указать либо этот параметр, либо keep_words.

keep_words_case
(Необязательно, логическое значение) Если true, все слова из списка приводятся к нижнему регистру. По умолчанию false.

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

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

Например, следующий запрос API создания индекса использует настраиваемые фильтры keep для настройки двух новых пользовательских анализаторов:

  • standard_keep_word_array, который использует пользовательский фильтр keep со встроенным массивом слов, которые нужно оставить
  • standard_keep_word_file, который использует пользовательский фильтр keep с файлом слов, которые нужно оставить
resp = client.indices.create(
    index="keep_words_example",
    settings={
        "analysis": {
            "analyzer": {
                "standard_keep_word_array": {
                    "tokenizer": "standard",
                    "filter": [
                        "keep_word_array"
                    ]
                },
                "standard_keep_word_file": {
                    "tokenizer": "standard",
                    "filter": [
                        "keep_word_file"
                    ]
                }
            },
            "filter": {
                "keep_word_array": {
                    "type": "keep",
                    "keep_words": [
                        "one",
                        "two",
                        "three"
                    ]
                },
                "keep_word_file": {
                    "type": "keep",
                    "keep_words_path": "analysis/example_word_list.txt"
                }
            }
        }
    },
)
print(resp)
const response = await client.indices.create({
  index: "keep_words_example",
  settings: {
    analysis: {
      analyzer: {
        standard_keep_word_array: {
          tokenizer: "standard",
          filter: ["keep_word_array"],
        },
        standard_keep_word_file: {
          tokenizer: "standard",
          filter: ["keep_word_file"],
        },
      },
      filter: {
        keep_word_array: {
          type: "keep",
          keep_words: ["one", "two", "three"],
        },
        keep_word_file: {
          type: "keep",
          keep_words_path: "analysis/example_word_list.txt",
        },
      },
    },
  },
});
console.log(response);
PUT keep_words_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "standard_keep_word_array": {
          "tokenizer": "standard",
          "filter": [ "keep_word_array" ]
        },
        "standard_keep_word_file": {
          "tokenizer": "standard",
          "filter": [ "keep_word_file" ]
        }
      },
      "filter": {
        "keep_word_array": {
          "type": "keep",
          "keep_words": [ "one", "two", "three" ]
        },
        "keep_word_file": {
          "type": "keep",
          "keep_words_path": "analysis/example_word_list.txt"
        }
      }
    }
  }
}

© 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-keep-words-tokenfilter.html

Spec-Zone.ru

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