2016-02-08 4 views
0

У меня проблемы с пониманием обработки специальных символов в lucene.
Моего анализатор не имеет стоп-слов, так что специальные символы не удаляются:lucene query специальные символы

CharArraySet stopwords = new CharArraySet(0, true); 
return new GermanAnalyzer(stopwords); 

чем я создаю документы, как:

doc.add(new TextField("tags", "23", Store.NO)); 
doc.add(new TextField("tags", "Brüder-Grimm-Weg", Store.NO)); 

Query тегов: Brüder \ -g хорошо, но нечеткие работы запрос теги: brüder \ -g ~ ничего не возвращает. Когда название улицы будет Eselgasse запрос теги: Esel ~ будет работать нормально.
Я использую lucene 5.3.1

Спасибо за помощь!

+0

Странно, что когда * QueryParser * анализирует ** теги: brüder \ -gri **, * Query.toString() * возвращает ** теги: теги brud: gri ** – george

ответ

0

Нечеткие запросы (а также подстановочные или регулярные запросы) не анализируются QueryParser.

Если вы используете StandardAnalyzer, например, «Brüder-Grimm-Weg» будет индексироваться как три условия: «brüder», «grimm» и «weg». Таким образом, после анализа у вас есть:

  • "tags:brüder\-g" ->tags:brüder tags:g
    Совпадение по tags:brüder

  • "tags:brüder\-g~" ->tags:brüder-g~2
    Поскольку это не анализируются, остается один член, и у вас нет совпадений, поскольку в вашем индексе нет единого термина, например «brüder-g»

Смежные вопросы