Lucene结合IKAnalyzer内存溢出
public LuceneDomain searchIndex(String searchStr) throws Exception{
File indexDir = new File(PropertiesUtil.getPropertyValue(searchDirKEY));
String[] fields=new String[]{"id","source","title","context","url"};
//索引目录
Directory dir=FSDirectory.open(indexDir);
//根据索引目录创建读索引对象
IndexReader reader = IndexReader.open(dir);
//搜索对象创建
IndexSearcher searcher = new IndexSearcher(reader);
//IKAnalyzer中文分词
Analyzer analyzer = new IKAnalyzer();
//创建查询解析对象
//QueryParser parser = new QueryParser(Version.LUCENE_36,"context", analyzer);
QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_36,fields, analyzer);
parser.setDefaultOperator(QueryParser.AND_OPERATOR);
//根据域和目标搜索文本创建查询器
//Query query = parser.parse(searchStr);
Query query =IKQueryParser.parseMultiField(fields, searchStr);
System.out.println("Searching for: " + query.toString("context"));
//对结果进行相似度打分排序
TopScoreDocCollector collector = TopScoreDocCollector.create(maxBufferedDocs,false);
searcher.search(query, collector);
//获取结果
ScoreDoc[] hits = collector.topDocs().scoreDocs;
int numTotalHits = collector.getTotalHits();
LuceneDomain lucene=new LuceneDomain();
lucene.setTotalNum(numTotalHits);
lucene.setSearchText(searchStr);
List<SearchDomain> searchList=new ArrayList<SearchDomain>();
//显示搜索结果
SearchDomain search=null;
for (int i = 0; i < hits.length; i++) {
search=new SearchDomain();
Document doc = searcher.doc(hits[i].doc);
// String url = doc.get("url");
// String title=doc.get("title");
String context=Tools.replaceHtml(doc.get("context"));
search.setId(Integer.parseInt(doc.get("id")));
search.setSource(Integer.parseInt(doc.get("source")));
search.setTitle(Tools.replaceHtml(doc.get("title")));
if(context.length()>100){
search.setContext(context.substring(0,100));
}else{
search.setContext(context);
}
search.setUrl(doc.get("url"));
// System.out.println((i + 1) + "." + title);
// System.out.println("-----------------------------------");
// System.out.println(context.substring(0,100)+"......");
// System.out.println(url+"......");
// System.out.println("-----------------------------------");
// System.out.println(url);
searchList.add(search);
}
lucene.setSearchData(searchList);
return lucene;
}