Проблемы с поиском двух терминов с помощью Lucene - PullRequest
0 голосов
/ 08 августа 2011

Я написал следующий код в моем проекте:

final IndexSearcher indexSearcher = new IndexSearcher(INDEXING_DIRECTORY, true);  
final Query query = new QueryParser(Version.LUCENE_33, "keywords", new StandardAnalyzer(Version.LUCENE_33)).parse("cats movies");
final TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
indexSearcher.search(query, collector);
final ScoreDoc[] hits = collector.topDocs(0, 10).scoreDocs;

Задача очень тривиальная.

У меня, например, есть сохраненная запись с индексированным полем "ключевые слова".Например, ключевые слова могут быть похожи на «Тонны фильмов с забавными кошками».

Проблема в том, что мой код, приведенный выше, будет возвращать записи, если поисковый запрос будет "смешные кошки" (порядок слов, как в индексированном поле), но не будет работать в "фильмах кошек".Как мне написать свой запрос, чтобы он соответствовал любому порядку слов и, если возможно, осуществлял поиск похожих слов?

1 Ответ

1 голос
/ 08 августа 2011

Скорее всего "фильмы о кошках" будут проанализированы как PhraseQuery. PhraseQueries уважают порядок. Вам нужно иметь BooleanQuery с двумя TermQueries в сочетании с AND.

final Query query = new QueryParser(Version.LUCENE_33, "keywords", new StandardAnalyzer(Version.LUCENE_33)).parse("+cats AND +movies");

Некоторые другие примеры перечислены здесь . Некоторые могут быть уже устаревшими.

Подобные слова - довольно сложная задача, потому что вам нужен хотя бы какой-то список слов или база данных, которая бы совмещала синонимы.

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