我正在使用 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);
我不知道为什么同义词扩展对我不起作用以及如何进行拼写检查。如果有人可以指导我,我将非常感激。
谢谢!