0

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

1 に答える 1

1

WhitespaceAnalyzer で "The quick Cat jumped over the lazy CAT6" という文を実行すると、次のように処理されます:
[The] [quick] [Cat] [jumped] [over] [the] [lazy] [CAT6]

ご覧のとおり、"Cat" は明らかに true のケースでリストに表示されているので、見つけることができるはずです。どのように問い合わせていますか?クエリ中にどのアナライザーを使用していますか?

于 2013-12-06T13:14:03.760 に答える