У меня есть вопрос, касающийся Lucene.
У меня есть форма, и я получаю от нее текст, и я хочу выполнить полнотекстовый поиск по нескольким полям. Предположим, я получил от ввода текст «textToLook».
У меня есть Lucene Analyzer с несколькими фильтрами. Один из них - lowerCaseFilter, поэтому при создании индекса слова будут в нижнем регистре.
Представьте, что я хочу выполнить поиск в двух полях field1 и field2, чтобы запрос lucene был примерно таким (обратите внимание, что textToLook теперь равно texttolook):
field1: texttolook* field2:texttolook*
В моем классе у меня есть что-то подобное для создания запроса. Я работаю, когда нет подстановочного знака.
String text = "textToLook";
String[] fields = {"field1", "field2"};
//analyser is the same as the one used for indexing
Analyzer analyzer = fullTextEntityManager.getSearchFactory().getAnalyzer("customAnalyzer");
MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, analyzer);
org.apache.lucene.search.Query queryTextoLibre = parser.parse(text);
С этим кодом запрос будет:
field1: texttolook field2:texttolook
но если я установлю текст на "textToLook *", я получу
field1: textToLook* field2:textToLook*
, который не будет правильно найден, так как индексы в нижнем регистре.
Я прочитал на сайте Lucene это:
"Подстановочные, префиксные и нечеткие запросы
не передаются через анализатор,
который является компонентом, который выполняет
такие операции, как
lowercasing "
Моя проблема не может быть решена путем установки нечувствительного к регистру поведения, потому что у моего анализатора есть другие поля, которые, например, удаляют некоторые суффиксы слов.
Я думаю, что смогу решить проблему, получив, как будет выглядеть текст после прохождения фильтров моего анализатора, затем я смогу добавить «*», а затем я мог бы построить Запрос с MultiFieldQueryParser. Таким образом, в этом примере я получаю «textToLower», и после перехода к этим фильтрам я могу получить «texttolower». После этого я мог сделать "текстотелу *".
Но есть ли способ получить значение моей текстовой переменной после прохождения всех фильтров моего анализатора? Как я могу получить все фильтры моего анализатора? Это возможно?
Спасибо