私は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,
しかし、それは私に結果を与えません。 私はスペルチェックを導入したいと思います。私が "信じられない"の代わりに "ubelievable"と入力すると、それでも結果が得られます。
searcher, analyze,"keyword",serialVersionUID);
なぜ私は同義語拡張がうまくいかず、スペルチェックを行う方法がわかりません。誰かが私を導くことができたら、本当に感謝します。
ありがとうございます!
@ffriendが参照するサンプルへのリンクhttp://subversion.assembla.com/svn/LuceneInAction/LuceneInAction/src/lia/analysis/synonym/ –