`
phantom
  • 浏览: 162451 次
社区版块
存档分类
最新评论

IKAnalyzerDemo 全文检索及分词实例

阅读更多
/**  
 * IK Analyzer Demo  
 * @param args  
 */  
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;
import org.wltea.analyzer.IKSegmentation;
import org.wltea.analyzer.Lexeme;
import org.wltea.analyzer.lucene.IKAnalyzer;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;

import cn.jh.db.jdbc.DBO;
import cn.jh.db.jdbc.DBOManager;
  
/**  
 * @author linly  
 *  
 */  
public class IKAnalyzerDemo {   
	  static final File INDEX_DIR = new File("index");
	  static void test() throws Exception{
		 String fieldName = "text";   
         //检索内容   
        IndexWriter iwriter = null;  
	
		RAMDirectory ramDir  =   new  RAMDirectory();
		IKAnalyzer ika=new IKAnalyzer();
		
	
	
		
		  DBO newsdbo = DBOManager.createDBO("CMS34");
		  {
			iwriter=new IndexWriter(ramDir, ika, true , IndexWriter.MaxFieldLength.LIMITED);   
		    IndexWriter fileWriter = new IndexWriter(FSDirectory.open(INDEX_DIR),ika, true, IndexWriter.MaxFieldLength.LIMITED);
			fileWriter.addIndexesNoOptimize(new Directory[]{ramDir});   
			
			  Document doc = new Document(); 
		      doc.add(new Field(fieldName, "1234", Field.Store.YES, Field.Index.ANALYZED));   
	          iwriter.addDocument(doc); 
	          iwriter.commit();
	          iwriter.close();
			fileWriter.commit();  
			fileWriter.close();  
		  }
		  for(int i=0;i<1;i++){
			  iwriter = new IndexWriter(ramDir, ika, false , IndexWriter.MaxFieldLength.LIMITED);   
			  int m=1000*i;
			System.out.println("select Title from News_tab order by newsId desc  limit "+m+", 1000 ");
			  List<String> titles =  newsdbo.getObjList("select Title from News_tab limit "+m+", 5000 ", String.class);
			  for(String t:titles){
				  Document doc = new Document(); 
			      doc.add(new Field(fieldName, t, Field.Store.YES, Field.Index.ANALYZED));   
		          iwriter.addDocument(doc);   
			  }
			    iwriter.close();
			    
			    
			    IndexWriter fileWriter = new IndexWriter(FSDirectory.open(INDEX_DIR),ika, false, IndexWriter.MaxFieldLength.LIMITED);
				fileWriter.addIndexesNoOptimize(new Directory[]{ramDir});   
				//  =   new  IndexWriter(ramDir, ika, true );
				fileWriter.commit();  
				fileWriter.close();  
			    
		  }
      
          
	

	

		
	}
	  static void test2() throws Exception{
		  
		  
			IKAnalyzer ika=new IKAnalyzer();
		  RAMDirectory directory = null;   
     
        IndexSearcher isearcher = null;   
    
            //建立内存索引对象   
        

          
          IndexWriter iwriter = null;  
		
		  //实例化搜索器      
//		   
//		    directory = new RAMDirectory();     
//		    iwriter = new IndexWriter(directory, ika, true , IndexWriter.MaxFieldLength.LIMITED);   
//		    iwriter.addIndexesNoOptimize(new Directory[]{FSDirectory.open(INDEX_DIR)});
//		    iwriter.close();
		    
		    isearcher = new IndexSearcher(FSDirectory.open(INDEX_DIR));  
		    
		    //在索引器中使用IKSimilarity相似度评估器   
          isearcher.setSimilarity(new IKSimilarity());   
          
          String keyword = "铲除网上黄毒需法律亮剑"; 
          
          IKSegmentation ikSeg = new IKSegmentation(new StringReader(keyword),
  				true);
          keyword="";
	  		try {
	  			Lexeme l = null;
	  			while ((l = ikSeg.next()) != null) {
	  				if (l.getLexemeType() == 0){
	  					System.out.println(l.getLexemeText());
	  					keyword+=l.getLexemeText()+" ";
	  				}
	  				
	  			}
	  		} catch (IOException e) {
	  			e.printStackTrace();
	  		}
	          String fieldName = "text"; 
          //使用IKQueryParser查询分析器构造Query对象   
          Query query = IKQueryParser.parse(fieldName, keyword);   
             
          //搜索相似度最高的5条记录   
          int max=20;
          TopDocs topDocs = isearcher.search(query , max);   
          System.out.println("命中:" + topDocs.totalHits);   
          //输出结果   
          ScoreDoc[] scoreDocs = topDocs.scoreDocs;   
          for (int i = 0; i < topDocs.totalHits&&i<max; i++){   
              Document targetDoc = isearcher.doc(scoreDocs[i].doc);   
              System.out.println("内容:" + targetDoc.toString()+"\t\t"+targetDoc);   
          }              
             
		 

			
		}
    public static void main(String[] args) throws Exception{ 
     	test();
    	test2();
    	
//    	test2();
//    	test();
//    	test2();
//    	test();
//    	test2();
//    	test();
//    	test2();

    }   
}  
分享到:
评论

相关推荐

    IKAnalyzer中文分词好帮手

    public class IKAnalyzerDemo { public static void main(String[] args) throws IOException { // 创建Analyzer实例 Analyzer analyzer = new IKAnalyzer(true); // 准备待分词文本 String text = "IK-...

    solr_5.0_tomcat7_IKAnalyzer中文分词安装及demo

    在这个"solr_5.0_tomcat7_IKAnalyzer中文分词安装及demo"的压缩包中,你将找到如何在Solr 5.0中集成IKAnalyzer并进行演示的详细步骤。 首先,我们需要了解Solr与IKAnalyzer的集成过程: 1. **下载和解压**:获取...

    IKAnalyzer3.2.8.jar + doc(index.html)+demo 史上最全

    IKAnalyzer 是一个开源的、基于Java语言开发的中文分词器,主要应用于全文检索和自然语言处理领域。这款工具在中文信息处理方面表现出了高效、灵活的特点,深受开发者喜爱。标题提到的 "IKAnalyzer3.2.8.jar" 是IK...

    Lucene-Demo.rar Lucene分词的demo

    分词器的配置是灵活的,可以根据需求选择不同的分词策略,比如标准分词器(StandardAnalyzer)适用于大多数英文文本,而中文分词可能需要使用IKAnalyzer或SmartChineseAnalyzer等针对中文特性的分词器。 在运行这个...

    lucene4.6实例

    - 使用合适的分析器:根据应用需求选择合适的分析器,例如英文的StandardAnalyzer或中文的IKAnalyzer。 - 调优索引性能:合理设置索引参数,如缓冲区大小、合并策略等,以平衡速度与磁盘空间。 - 多线程处理:...

    lucene实例

    不同的语言可能需要不同的分词器,例如英文的 StandardAnalyzer 和中文的 IKAnalyzer。 4. **术语(Term)**:分词后的结果称为术语,它是 Lucene 搜索的基本单元。 5. **倒排索引(Inverted Index)**:这是 ...

    lucene开发部分例子

    例如,可以使用IK Analyzer、SmartCN Analyzer或jieba分词库来实现。此外,你还会学习到如何设计查询解析器,将用户的输入转换为Lucene可以理解的查询语法。 "搜索结果的处理和显示"这部分则涉及到如何获取查询结果...

    solr-solrj 5.0.0 demo

    在中文分词方面,Solr-Solrj配合Solr的中文分析器(如IK Analyzer、Smart Chinese Analyzer或HanLP等)能有效地处理中文文本。这些分析器会将输入的中文字符串拆分成有意义的词语,便于索引和搜索。配置分析器通常在...

    solr7.4数据库导入Demo(mysql数据库)

    总的来说,这个Demo涵盖了Solr 7.4与MySQL的集成、数据导入和IK分词器的使用,帮助你搭建一个能够处理中文数据的全文搜索引擎。通过实践,你可以更好地理解Solr的数据处理流程以及如何优化中文搜索体验。

    全文搜索-Lucene

    开发者可以根据需求选择不同的分析器,例如标准分析器(StandardAnalyzer)用于处理英文文本,而中文则需要使用如 IK 分析器(IKAnalyzer)。 2. **Document**: 文档对象代表要索引的信息,可以包含多个字段(Field...

    lucene 3.6

    1. 初始化 Analyzer(例如使用 IKAnalyzer),并创建 Directory 对象(如 RAMDirectory 或 FSDirectory)来存储索引。 2. 使用 IndexWriter 实例化并配置参数,开始写入索引。 3. 创建 Document 对象,添加 Field,...

    [搜索链接]淘特搜索引擎共享版_tot_search_engine.zip

    7. **分词技术**:如使用开源的HanLP、IK Analyzer等进行中文分词,以便于处理中文搜索。 8. **缓存机制**:可能包含对搜索结果的缓存,以减少重复计算和提升响应速度。 9. **并发处理**:学习如何处理大量并发的...

Global site tag (gtag.js) - Google Analytics