首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

Lucene组合IKAnalyzer内存溢出

2013-01-11 
Lucene结合IKAnalyzer内存溢出public LuceneDomain searchIndex(String searchStr) throws Exception{File

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;
    }



这里 //Query query = parser.parse(searchStr);
        Query query =IKQueryParser.parseMultiField(fields, searchStr);
我如果用原版的分词器没问题
用这个IK分词器的话就会出现内存溢出!我设置了512的内存才5000行新闻就溢出了我想知道是什么问题 并不想去改内存大小,
因为英文分词器可以达到20万条

热点排行
Bad Request.