2011-08-13 13 views
1

私はLuceneを使用してデータベースのインデックスを作成し、特定のフィールド(フィールド名:キーワード)でフレーズ検索を実行しています。現在 私が使用しています次のコード:Lucene同義語の拡張、ステミング、スペルチェックなど

 String userQuery = request.getParameter("query"); 
     //create standard analyzer object 
     analyzer = new StandardAnalyzer(Version.LUCENE_30); 
        Analyzer analyze=AnalyzerUtil.getPorterStemmerAnalyzer(analyzer); 
     //create File object of our index directory 
     File file = new File(LUCENE_INDEX_DIRECTORY); 
     //create index reader object 
     reader = IndexReader.open(FSDirectory.open(file),true); 
     //create index searcher object 
     searcher = new IndexSearcher(reader); 
     //create topscore document collector 
     collector = TopScoreDocCollector.create(1000, false); 
     //create query parser object 
     parser = new QueryParser(Version.LUCENE_30,"keyword", analyze); 
        parser.setAllowLeadingWildcard(true); 
     //parse the query and get reference to Query object 
     query = parser.parse(userQuery); 
     //********Line 1*********************** 
        //search the query 
     searcher.search(query, collector); 
     hits = collector.topDocs().scoreDocs; 
     //check whether the search returns any result 
     if(hits.length>0){//Code to retrieve hits} 

このコードは語幹のために正常に動作しますが、今私はまた私が「男」と入力し、私のLuceneインデックスエントリを "持っている場合のような同義語検索を行うには、私のクエリを展開したいですオス "、それはまだ私にヒットとしてそれを与えることができるだろう。 私はこれを上記のコードの1行目に追加しようとしましたquery=SynExpand.expand(userQuery,
searcher, analyze,"keyword",serialVersionUID);
しかし、それは私に結果を与えません。 私はスペルチェックを導入したいと思います。私が "信じられない"の代わりに "ubelievable"と入力すると、それでも結果が得られます。

なぜ私は同義語拡張がうまくいかず、スペルチェックを行う方法がわかりません。誰かが私を導くことができたら、本当に感謝します。

ありがとうございます!

答えて

3

あいまい検索、すなわちチルダを追加することで、クエリキーワード修飾子によって行うことができる。

keyword:ubelievable~ 

はあなたに面白いかもしれクエリの詳細や他のタイプのLucene Parser Syntaxを参照してください。

シノニムを扱う2つの方法があります。 クエリの拡張は、使用しようとしているのはWordNetです。 SynExpandのドキュメントには、最初にSyns2Indexを呼び出して拡張機能を使用する必要があります。これは簡単な方法ですが、英語の単語でのみ機能します。

複数の言語のサポートを追加するか、独自の同義語を追加する必要がある場合は、インデックス作成中にシノニムインジェクションを使用できます。アイデアは、独自の辞書からシノニムをインデックス付きのドキュメントに挿入する独自のアナライザーを作成することです。これは実装が難しいかもしれませんが、幸運にもLucene in Action本の中には優れた例があります(ソースコードは無料で利用できます、lia.analysis.synonymパッケージを参照してください)。

+0

@ffriendが参照するサンプルへのリンクhttp://subversion.assembla.com/svn/LuceneInAction/LuceneInAction/src/lia/analysis/synonym/ –

関連する問題