Самый эффективный способ разделить Lucene QueryString от Whitespace - PullRequest
0 голосов
/ 24 января 2012

При разбиении поискового запроса по пробелам так, чтобы при поиске имени, например, термин «Джон Доу» соответствовал результатам «Джон», «Доу» или «Джон Доу», а не только весь запрос в егоцельность.Вот как я это делаю сейчас:

BooleanQuery booleanQuery = new BooleanQuery();
String[] terms = queryString.split(" ");
for(String term : terms) {
    booleanQuery.add(new FuzzyQuery(new Term("firstName", term)), BooleanClause.Occur.SHOULD);
    booleanQuery.add(new FuzzyQuery(new Term("lastName", term)), BooleanClause.Occur.SHOULD);
}

Для меня такой подход выглядит немного грязно.Есть ли лучший способ?

1 Ответ

0 голосов
/ 25 января 2012

Ваш анализатор запросов неверен, если вы не используете тривиальный анализатор. Вы должны анализировать условия запроса так же, как они были проанализированы во время индексации .

В зависимости от того, что вы пытаетесь сделать, вам, вероятно, следует разбить строку запроса с помощью анализатора.Это не обязательно, но если вы этого не сделаете (например, вы можете разбить пробелы и затем проанализировать каждое слово независимо), вам нужно будет решить некоторые (нетривиальные) проблемы:

  • что делатькогда анализ слова дает несколько терминов (может произойти с составными именами)?
  • что делать, если слово является стоп-словом (не дает никакого токена)?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...