API анализа текста
Выполняет обработку текста над строкой и возвращает полученные токены.
GET /_analyze
{
"analyzer" : "standard",
"text" : "Quick Brown Foxes!"
} Запрос
GET /_analyze
POST /_analyze
GET /<index>/_analyze
POST /<index>/_analyze
Предварительные условия
- Если включены функции безопасности Elasticsearch, у вас должна быть
manageпривилегия доступа к индексу для указанного индекса.
Параметры пути
-
<index> -
(Необязательно, строка) Индекс, используемый для получения анализатора.
Если указано, параметр
analyzerили<field>переопределяет это значение.Если не указан анализатор или поле, API анализа использует анализатор по умолчанию для индекса.
Если индекс не указан или у индекса нет анализатора по умолчанию, API анализа использует стандартный анализатор.
Параметры запроса
-
analyzer -
(Необязательно, строка) Имя анализатора, который должен быть применен к предоставленной
text. Это может быть встроенный анализатор или анализатор, настроенный в индексе.Если этот параметр не указан, API анализа использует анализатор, определённый в отображении поля.
Если поле не указано, API анализа использует анализатор по умолчанию для индекса.
Если индекс не указан или у индекса нет анализатора по умолчанию, API анализа использует стандартный анализатор.
-
attributes - (Необязательно, массив строк) Массив атрибутов токенов, используемых для фильтрации вывода параметра
explain. -
char_filter - (Необязательно, массив строк) Массив фильтров символов, используемых для предобработки символов перед токенизацией. См. Справочник по фильтрам символов для списка фильтров символов.
-
explain - (Необязательно, булево) Если
true, ответ включает атрибуты токенов и дополнительные детали. По умолчаниюfalse. [превью] Формат дополнительной информации помечается как экспериментальный в Lucene и может быть изменён в будущем. -
field -
(Необязательно, строка) Поле, используемое для получения анализатора. Чтобы использовать этот параметр, необходимо указать индекс.
Если указано, параметр
analyzerпереопределяет это значение.Если поле не указано, API анализа использует анализатор по умолчанию для индекса.
Если индекс не указан или у индекса нет анализатора по умолчанию, API анализа использует стандартный анализатор.
-
filter - (Необязательно, Массив строк) Массив фильтров токенов, применяемых после токенизации. См. Справочник по фильтрам токенов для списка фильтров токенов.
-
normalizer - (Необязательно, строка) Нормализация для преобразования текста в один токен. См. Нормализации для списка нормализаторов.
-
text - (Обязательно, строка или массив строк) Текст для анализа. Если предоставлен массив строк, он анализируется как поле с несколькими значениями.
-
tokenizer - (Необязательно, строка) Токенизатор для преобразования текста в токены. См. Справочник по токенизаторам для списка токенизаторов.
Примеры
Без указания индекса
Вы можете применить любой из встроенных анализаторов к строке текста без указания индекса.
GET /_analyze
{
"analyzer" : "standard",
"text" : "this is a test"
} Массив строк текста
Если параметр text задан как массив строк, он анализируется как поле с несколькими значениями.
GET /_analyze
{
"analyzer" : "standard",
"text" : ["this is a test", "the second text"]
} Пользовательский анализатор
Вы можете использовать API анализа для проверки пользовательского временного анализатора, созданного из токенизаторов, фильтров токенов и фильтров символов. Фильтры токенов используют параметр filter:
GET /_analyze
{
"tokenizer" : "keyword",
"filter" : ["lowercase"],
"text" : "this is a test"
} GET /_analyze
{
"tokenizer" : "keyword",
"filter" : ["lowercase"],
"char_filter" : ["html_strip"],
"text" : "this is a <b>test</b>"
} Пользовательские токенизаторы, фильтры токенов и фильтры символов могут быть указаны в теле запроса следующим образом:
GET /_analyze
{
"tokenizer" : "whitespace",
"filter" : ["lowercase", {"type": "stop", "stopwords": ["a", "is", "this"]}],
"text" : "this is a test"
} Указание конкретного индекса
Вы также можете запустить API анализа для конкретного индекса:
GET /analyze_sample/_analyze
{
"text" : "this is a test"
} Вышеприведённый пример выполнит анализ текста "this is a test" с использованием анализатора по умолчанию для индекса analyze_sample. Также можно указать analyzer для использования другого анализатора:
GET /analyze_sample/_analyze
{
"analyzer" : "whitespace",
"text" : "this is a test"
} Получение анализатора из отображения поля
Анализатор может быть получен на основе отображения поля, например:
GET /analyze_sample/_analyze
{
"field" : "obj1.field1",
"text" : "this is a test"
} Это заставит анализ произойти на основе анализатора, настроенного в отображении для поля obj1.field1 (а если нет, то анализатора по умолчанию индекса).
Нормализация
Можно указать normalizer для поля типа "ключевое слово" с нормализацией, связанной с индексом analyze_sample.
GET /analyze_sample/_analyze
{
"normalizer" : "my_normalizer",
"text" : "BaR"
} Или создав пользовательскую временную нормализацию из фильтров токенов и фильтров символов.
GET /_analyze
{
"filter" : ["lowercase"],
"text" : "BaR"
} Объяснение анализа
Если вам нужны более подробные сведения, установите explain в значение true (по умолчанию false). Это выведет все атрибуты токенов для каждого токена. Вы можете отфильтровать требуемые атрибуты токенов, установив параметр attributes.
Формат дополнительной информации помечается как экспериментальный в Lucene и может быть изменён в будущем.
GET /_analyze
{
"tokenizer" : "standard",
"filter" : ["snowball"],
"text" : "detailed output",
"explain" : true,
"attributes" : ["keyword"]
} | Установите "keyword" для вывода только атрибута "keyword" |
Запрос возвращает следующий результат:
{
"detail" : {
"custom_analyzer" : true,
"charfilters" : [ ],
"tokenizer" : {
"name" : "standard",
"tokens" : [ {
"token" : "detailed",
"start_offset" : 0,
"end_offset" : 8,
"type" : "<ALPHANUM>",
"position" : 0
}, {
"token" : "output",
"start_offset" : 9,
"end_offset" : 15,
"type" : "<ALPHANUM>",
"position" : 1
} ]
},
"tokenfilters" : [ {
"name" : "snowball",
"tokens" : [ {
"token" : "detail",
"start_offset" : 0,
"end_offset" : 8,
"type" : "<ALPHANUM>",
"position" : 0,
"keyword" : false
}, {
"token" : "output",
"start_offset" : 9,
"end_offset" : 15,
"type" : "<ALPHANUM>",
"position" : 1,
"keyword" : false
} ]
} ]
}
} | Выводится только атрибут "keyword", так как в запросе указан параметр "attributes". |
Установка лимита на количество токенов
Генерация чрезмерного количества токенов может привести к недостатку памяти на узле. Следующее ограничение позволяет ограничить количество генерируемых токенов:
-
index.analyze.max_token_count - Максимальное количество токенов, которое может быть сгенерировано при использовании API
_analyze. Значение по умолчанию —10000. Если генерируется более этого лимита токенов, будет выдано сообщение об ошибке. API_analyzeбез указанного индекса всегда использует значение10000в качестве лимита. Это ограничение позволяет контролировать лимит для конкретного индекса:
PUT /analyze_sample
{
"settings" : {
"index.analyze.max_token_count" : 20000
}
} GET /analyze_sample/_analyze
{
"text" : "this is a test"
}
© 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/indices-analyze.html