import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import to.ResourceTO;
public class SearchIndex {
static final String LUCENE_INDEX_DIRECTORY = "C:\\lucene\\";
public static ArrayList searchIndexData(String userQuery){
IndexReader reader = null;
IndexSearcher searcher = null;
TopScoreDocCollector collector = null;
Query query = null;
ScoreDoc[] hits = null;
ArrayList al = new ArrayList();
ResourceTO to = null;
int ResultsPerPage = 5;
try{
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
File file = new File(LUCENE_INDEX_DIRECTORY);
reader = IndexReader.open(FSDirectory.open(file),true);
searcher = new IndexSearcher(reader);
collector = TopScoreDocCollector.create(2*ResultsPerPage, false);
QueryParser parser = new QueryParser(Version.LUCENE_30, "fulltext", analyzer);
query = parser.parse(userQuery);
searcher.search(query, collector);
hits = collector.topDocs().scoreDocs;
if(hits.length>0){
for(int i=0; i<hits.length; i++){
int scoreId = hits[i].doc;
Document document = searcher.doc(scoreId);
to = new ResourceTO();
to.setArticleId(Integer.parseInt(document.getField("id").stringValue()));
to.setTitle(document.getField("title").stringValue());
to.setPostDate(java.sql.Timestamp.valueOf(document.getField("post_date").stringValue()));
al.add(to);
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(reader!=null)
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return al;
}
}