При поиске подстановочных знаков обычная цепочка анализа не будет вызываться, если не настроен фильтр MultiTermAware. Это означает, что вы переключаете поисковое поведение, не зная, что происходит за кулисами.
Lucene и Solr работают с токенами - токены обычно представляют собой отдельные слова (после некоторой обработки) из входного потока символов, разделенные («токенизированные») на разные символы в зависимости от того, что является токенизатором для поля. Токенизатор обычно разделяется на большинство не алфавитных символов c, и явное определение цепочки анализа позволит вам получить поведение, которое вы ищете.
Я предполагаю, что ваш токенизатор разбивается на большую часть специальные символы, которые есть в вашей строке, так что K[arina
фактически заканчивается индексированием как K
и arina
.
K\\[arina => K, arina (split on \ and [)
Нет соответствия токенов:
K\[arin* => nothing happens, since there is no token starting with K[arin
Исключение подстановочного знака означает, что вся строка отправляется токенизатору, по сути, это не поиск по шаблону, а поиск со строкой, содержащей взамен *
:
K\[arin\* => K, arin -> K matches (and arin if an ngram filter is attached)
(one of your later examples show that there is no ngram filter)
То же поведение здесь, минуя звездочку означает, что вся строка отправляется токенизатору вместо поиска по шаблону:
\*\[arina => arina -> arina matches
И когда токены не совпадают:
\*\[arin\* => arin -> there is no token matching arin, only arina.
Случай 6 предназначен для фраз, что токены с пробелами между ними ищутся как одно совпадение. Сейчас я пропущу это.
Последний случай фактически заканчивается пустым поиском, поскольку токенизатор разделится на ?
и не оставит токенов, которые можно было бы использовать. Ваш первый пример в этой строке оставляет ожидаемые токены, K
и arina
:
K\[arina => K, arina
\?\!a\& => a
\? => <nothing>