При запросе с использованием подстановочных знаков большая часть анализа не выполняется - это означает, что токены, по которым вы ищете, не совпадают с теми, которые вы запрашиваете.
WordDelimiterFilter будет разбивать токены на основе '
, что означает, что при индексации контента вы будете получать отдельные токены для каждой части слова - то есть O
и Brien
.При поиске такое разделение не произойдет, и Lucene попытается сопоставить один токен - O'Brien
с индексированными токенами.Поскольку токен не соответствует O'Brien
(так как термин был разбит на несколько токенов при индексации), вы не получите попадание.
Решение состоит в том, чтобы создать поле, совпадающее с символами подстановки, которые вы ожидаетеиспользуйте - в этом случае, вероятно, поле только с WhitespaceTokenizer и LowercaseFilter (которое должно работать с подстановочными знаками, так как оно является multitemaware).
Ожидается использование нескольких различных полей с одинаковым содержимым, и вы можете использовать copyField
чтобы убедиться, что один и тот же контент индексируется в несколько полей, а затем обрабатывается по-разному, в зависимости от того, как вы собираетесь их запрашивать.Таким образом, у вас может быть одно поле, по которому вы будете искать, когда вы ожидаете, что Brien будет совпадать с O'Brien, и то, которое вы можете использовать для поиска по шаблону, где это может быть не так.