#elasticsearch
Вопрос:
Я пытаюсь написать анализатор, который также будет маркировать звезды (‘*’). Я пытался написать что-то вроде:
"test_analyzer": {
"type": "pattern",
"pattern": "\W|_",
"flags": "CASE_INSENSITIVE|COMMENTS"
}
Это сработало нормально для большинства случаев, которые меня интересуют. Однако, в случае, если у меня есть звезда, она просто игнорирует ее.
Например, для:
GET test_index_06/_analyze
{
"analyzer": "test_analyzer",
"text": "other_table*"
}
Я получаю:
{
"tokens" : [
{
"token" : "other",
"start_offset" : 0,
"end_offset" : 5,
"type" : "word",
"position" : 0
},
{
"token" : "table",
"start_offset" : 6,
"end_offset" : 11,
"type" : "word",
"position" : 1
}
]
}
где я хотел получить также знак *.
Есть какие-нибудь идеи?
редактировать: Также пытался:
"test_analyzer": {
"type": "pattern",
"pattern": "_|\t|\n|\s|\v ",
"flags": "CASE_INSENSITIVE"
}
но получение: [другое, таблица*] вместо получения [другое, таблица, *]
Спасибо, С Уважением, Нир.
Комментарии:
1. Смогли ли вы решить эту проблему?
2. @Gibbs — ну, на самом деле я остановился на [другом, таблица*] решении, которое для меня достаточно хорошо. Спасибо вам за помощь!
Ответ №1:
Причина:
Pattern
анализатор маркирует символы, не содержащие слов. Вот *
не-словесный символ as -
. Следовательно, токены создаются без них.
Чтобы справиться с этим с помощью того же анализатора шаблонов:
"test_analyzer": {
"type": "pattern",
"pattern": "_",
"flags": "CASE_INSENSITIVE|COMMENTS"
}
Это приводит к следующим маркерам из-за токенизатора по умолчанию, фильтров маркеров анализатора шаблонов.
{
"tokens": [
{
"token": "other",
"start_offset": 0,
"end_offset": 5,
"type": "word",
"position": 0
},
{
"token": "table*",
"start_offset": 6,
"end_offset": 12,
"type": "word",
"position": 1
}
]
}
Если вам нужны токены в определенном месте, вам необходимо обновить регулярное выражение/маркеры.
Комментарии:
1. спасибо @Gibbs. Но я также хочу разделиться на пробелы. Поэтому для «другого стола» я хочу получить [другой, стол]. Поэтому пытаюсь добавить пробелы, вкладки и тому подобное.
2. Вы определенно можете это сделать, добавив пробел в шаблон. s
3. хм, посмотрите на правку в исходном сообщении. Я хочу получить следующие токены [другое, таблица, *]
4. Как насчет использования
ingest
конвейера перед индексацией документа?5. не совсем знаком с этим. Я прочту об этом. Я ничего не могу сделать, используя шаблон?