Хиты одного слова в Lucene не найдены
Я создаю систему, которая просматривает статьи о разных вещах и выбирает некоторые описания об этом. В основном очень похоже на энциклопедию. Сначала я столкнулся с проблемой, когда, если я искал "кошку", я получал много обращений к таким статьям, как "CAT5", "CAT6", ".cat" и так далее. Однако хитом номер один по-прежнему был "Кот". Я использовал StandardAnalyzer для этого. Вместо этого я получил совет использовать WhitespaceAnalyzer, который решил исходную проблему и заставил Lucene отказаться от статей типа CAT6, но теперь статья "Cat" больше не входит в мой список посещений. Почему это? Любые предложения, например, для другого анализатора?
РЕДАКТИРОВАТЬ: код для самого поиска:
public static String searchAbstracts(String input, int hitsPerPage) throws ParseException, IOException {
String query = input;
StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_41);
Query q = new QueryParser(Version.LUCENE_41, "article", analyzer).parse(query);
Directory index = new NIOFSDirectory(new File(INDEX_PATH));
IndexReader reader = IndexReader.open(index);
String resultSet = "";
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
System.out.println("Found " + hits.length + " articles.");
for(int i=0;i<hits.length;++i) {
int docId = hits[i].doc;
Document d = searcher.doc(docId);
resultSet += d.get("desc") + " ";
System.out.println((i + 1) + ". " + d.get("article") + " :: Words from abstract: " + d.get("desc"));
}
return resultSet;
}
1 ответ
Когда вы запускаете предложение: "Быстрый кот перепрыгнул через ленивый CAT6" через WhitespaceAnalyzer, это то, что он с ним делает:
[The] [быстрый] [Cat] [перепрыгнул] [над] [the] [ленивый] [CAT6]
Как вы можете видеть, "Кот" явно указан в списке, вы сможете найти его. Как ты это делаешь? Во время запроса какой анализатор вы используете?