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}
このコードはステミングには問題なく機能しますが、「Man」と入力して lucene インデックスに「male」というエントリがある場合のように、クエリを拡張して同義語検索を実行したいと考えています。 . 上記のコードの 1 行目にこれを追加しようとしましたが
、結果は得られません。また、「信じられない」の代わりに「信じられない」と入力しても結果が得られるスペル チェックを導入したいと考えています。query=SynExpand.expand(userQuery,
searcher, analyze,"keyword",serialVersionUID);
同義語の展開が機能しない理由と、スペルチェックの方法がわかりません。誰かが私を案内してくれたら、本当に感謝しています。
ありがとう!