Столкнувшись с проблемой при использовании анализатора ключевых слов Lucene - PullRequest
1 голос
/ 20 сентября 2011

Невозможно правильно использовать анализатор ключевых слов lucene,

    String term = "new york";
    // id and location are the fields in which i want to search the "term"
    MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
                                       Version.LUCENE_30,
                                       {"id", "location"},
                                       new KeywordAnalyzer());
    Query query = queryParser.parse(term);
    System.out.println(query.toString());

РЕЗУЛЬТАТ: (id: новое местоположение: новое) (id: york location: york)

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ: (id: нью-йорк местоположение: нью-йорк) (id: нью-йорк местоположение: нью-йорк)

Пожалуйста, помогите мне определить, что я делаю не так здесь ??

1 Ответ

4 голосов
/ 20 сентября 2011

Вы не делаете ничего плохого. Именно так работает QueryParser. Поскольку вы индексируете свой текст как один токен с помощью KeywordAnalyzer, вы должны использовать TermQuery. Поскольку у вас есть два поля для поиска, вы можете объединить два запроса TermQueries, например:

BooleanQuery bq = new BooleanQuery();
bq.Add(new TermQuery(new Term("id", term)), BooleanClause.Occur.SHOULD );
bq.Add(new TermQuery(new Term("location", term)), BooleanClause.Occur.SHOULD );
string txtQuery = bq.ToString();
...