我使用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);
我不知道为什么同义词扩展不适合我,以及如何做拼写检查。请如果有人能指导我,我会非常感激。
谢谢!
链接到@ffriend引用的示例http://subversion.assembla.com/svn/LuceneInAction/LuceneInAction/src/lia/analysis/synonym/ –