私は、さまざまなものに関する記事を調べて、それに関する説明を選択するシステムを作成しています。基本的に百科事典のようなものです。最初は、「cat」で検索すると、「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;
}