У меня очень простой Анализатор, который пытается заменить косые черты (/) пробелами. Потому что QueryParser заставляет меня избегать строк с косыми чертами перед разбором, я добавил в анализатор MappingCharFilter, который заменяет «\ /» на единое пространство. Анализатор определяется следующим образом:Несоответствие анализатора Lucene QueryParser
@Override
protected TokenStreamComponents createComponents(String field, Reader in) {
NormalizeCharMap.Builder builder = new NormalizeCharMap.Builder();
builder.add("\\/", " ");
Reader mappingFilter = new MappingCharFilter(builder.build(), in);
Tokenizer tokenizer = new WhitespaceTokenizer(version, mappingFilter);
return new TokenStreamComponents(tokenizer);
}
Затем я использую этот анализатор в QueryParser разобрать строку с тире:
String text = QueryParser.escape("one/two");
QueryParser parser = new QueryParser(Version.LUCENE_48, "f", new MyAnalyzer(Version.LUCENE_48));
System.err.println(parser.parse(text));
ожидается выход будет
f:one f:two
Однако, Я получаю:
f:one/two
Удивительно, что когда я отлаживаю анализатор, он правильно маркирует входную строку, возвращая два токена вместо одного.
Что происходит?
Спасибо.
только так вы знаете, анализатор запросов будет обрабатывать текст перед анализатором будет, поэтому пробивать в е: заливка Foo/бар, вероятно, в конечном итоге в разговорника запросе как F: «Foo бар» в лучшем случае сценария, путем ввода нескольких токенов анализатора из токена анализатора запроса –