浏览 3251 次
锁定老帖子 主题:Lucene结合spring内存溢出
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-12-25
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; } 这里 //Query query = parser.parse(searchStr); Query query =IKQueryParser.parseMultiField(fields, searchStr); 我如果用原版的分词器没问题 用这个IK分词器的话就会出现内存溢出!我设置了512的内存才5000行新闻 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |