А можно jstack запустить и прислать сюда результат?
Видимо, проблема была в кривых руках, потому что не могу это воспроизвести.
Теперь следующий вопрос: если предположить, что синоним - лишь часть запроса, то есть, например, запрос выглядит как *cat*
- можно ли заставить его каким-то образом искать и *kitten*
? Какой токенайзер подошел бы в этом случае?
Если синонимы использовались при индексации - то ca*
найдет cat
, который получился при обработке kitten
. Если вам надо искать именно *kitten*
то лучше обрабатывать синонимы в вашем приложении и посылать elasticsearch готовый запрос.
Однако, надо отметить, что elasticsearch это не реляционная база данных, и запросы типа *foo*
, которые получаются при дословном переводе LIKE '%foo%'
работают далеко не оптимально. Более разумный подход был бы перетренировать пользователей, изменить приложение или поменять анализ, чтобы избежать такого рода запросов.
Спасибо! И еще один вопрос: а можно ли после создания индекса как-то добавить к нему словарь? я пытаюсь через _settings, но он ругается:
"type": "illegal_argument_exception",
"reason": "Can't update non dynamic settings [[index.analysis.analyzer.default.filter,
index.analysis.analyzer.default.tokenizer]] for open indices
[[pet_index/229jzNDiTfmgblF4GeIKUA]]"
Если этот токенайзер используется только при поиске, то его можно изменить предварительно закрыв индекс. Если с помощью него что-то индексировалось, то все эти документы будет необходимо пере-индексировать, и проще будет просто создать новый индекс с новыми установками и пере-индексировать все туда.
Спасибо!
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.