1
Мне нужен токенизатор Lucene, который может выполнять следующие действия. Учитывая струна "вина пробки для бутылок", следующие запросы должны преуспетьTokenizer Lucene Analyzer для поиска подстроки
- вино
- гельминтоз
- крышка
- Ottl
- ApS
- вино bottl
Вот что я до сих пор. Как я могу изменить его для работы? Никакой запрос менее трех символов не должен работать.
public class PorterAnalyzer extends Analyzer {
private final Version version;
public PorterAnalyzer(Version version) {
this.version = version;
}
@Override
@SuppressWarnings("resource")
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
final StandardTokenizer src = new StandardTokenizer(reader);
TokenStream tok = new StandardFilter(src);
tok = new LowerCaseFilter(tok);
tok = new StopFilter(tok, StandardAnalyzer.STOP_WORDS_SET);
tok = new PorterStemFilter(tok);
return new TokenStreamComponents(src, tok);
}
}
могли бы вы объяснить немного, что делает minGram и maxGram? В основном, как я знаю, что эти значения должны быть для разных запросов? –
Я очень новичок в Lucene, и я понятия не имею, что такое N-грамм. Спасибо –
Когда вы ищете «ottl», вы не получаете никаких результатов, потому что в вашем индексе содержится только «бутылка». Но вы можете добавить NGramTokenFilter в цепочку фильтров индексирования. Это добавило бы все возможные части, по крайней мере, minGram (т. Е. 2) и максимальные буквы maxGram (т. Е. 5). Например, с двумя буквами: bo, ot, tt ... и 3 буквы bot, ott, ottl, ... и 4 ... и 5 букв: bottl и ottle – timo