`
jp0520
  • 浏览: 10148 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

IKanalyzer3.2的问题

阅读更多

使用IKanalyzer3.2+lucene3.0搜索一个文本内容,结果只能出现一条,其实能匹配很多条,下面是源代码

 

package com.lucene.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.Date;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
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.TopScoreDocCollector;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.store.FSDirectory;
import org.wltea.analyzer.lucene.IKAnalyzer;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;

public class CopyOfIKanalyzerDemoToo {

 // 数据文件夹  
 private static final String DATA_DIR = "d:\\test\\file";
 // 索引存放文件夹  
 private static final String INDEX_DIR = "d:\\test\\index";
 // 字段  
 private static final String FIELD_NAME = "content";
 //是否要优化
 private static boolean optimize = true;

 public static void main(String[] args) throws Exception {
  createIndex();
//  search("共和国", "content");
 }

 public static void createIndex() throws Exception {
  boolean create = true;//是否重新创建索引文件,false:在原有的基础上追加
  Analyzer analyzer = new IKAnalyzer(); //IK中文分词器
  //创建索引
  IndexWriter indexWriter = new IndexWriter(FSDirectory.open(new File(
    INDEX_DIR)), analyzer, create,
    IndexWriter.MaxFieldLength.UNLIMITED);
  System.out.println("正在创建索引文件....");
  long startTime = new Date().getTime();
  indexDoc(indexWriter, new File(DATA_DIR));
  if (optimize) {
   indexWriter.optimize();
  }
  //最后关闭索引

  indexWriter.close();
  System.out.println("创建索引文件完成....总共花费时间:"
    + (new Date().getTime() - startTime));
 }

 public static void search(String query_str, String field) throws Exception {
  IndexReader reader = IndexReader.open(FSDirectory.open(new File(
    INDEX_DIR)), true);

  IndexSearcher searcher = new IndexSearcher(reader);

  searcher.setSimilarity(new IKSimilarity()); //在索引器中使用IKSimilarity相似度评估器

  
  Query query = IKQueryParser.parse(field, query_str); //IKQueryParser多个字段搜索 


  IKAnalyzer analyzer = new IKAnalyzer();


  TopScoreDocCollector topCollector = TopScoreDocCollector.create(
    searcher.maxDoc(), false);

  searcher.search(query, topCollector);

  ScoreDoc[] docs = topCollector.topDocs().scoreDocs;

  //关键字高亮显示的html标签,需要导入lucene-highlighter-3.0.3.jar

  SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(
    "<font color='red'>", "</font>");

  Highlighter highlighter = new Highlighter(simpleHTMLFormatter,
    new QueryScorer(query));

  for (int i = 0; i < docs.length; i++) {

   Document doc = searcher.doc(docs[i].doc);

   TokenStream tokenStream1 = analyzer.tokenStream("content",
     new StringReader(doc.get("content")));

   String content = highlighter.getBestFragment(tokenStream1, doc
     .get("content"));
   System.out.println("评分:" + docs[i].score);
   System.out.println("路径:" + doc.get("path"));
   System.out.println("内容:" + content);


  }

  reader.close(); //关闭索引  

  System.out.println("总共检索到记录:" + docs.length);

 }

 private static void indexDoc(IndexWriter writer, File root) {
  // 不去索引不能读的文件  
  if (root.canRead()) {
   if (root.isDirectory()) {
    File[] files = root.listFiles();
    if (files.length != 0) {
     for (int i = 0; i < files.length; i++) {
      // 递归调用  
      indexDoc(writer, files[i]);
     }
    }
   } else {
    try {
     // 文件的文本内容  
     InputStream in = new FileInputStream(root);
     byte b[] = new byte[in.available()];
     in.read(b);
     String content = new String(b, "GBK");
     System.out.println("" + content);
     // 创建一个lucene document  
     Document d = new Document();
     // 把文件的文本内容添加进来 进行索引,保存  
     d.add(new Field(FIELD_NAME, content, Field.Store.YES,
       Field.Index.ANALYZED,
       Field.TermVector.WITH_POSITIONS_OFFSETS));
     // 同时把path也加入进来,只存储,不索引  
     d.add(new Field("path", root.getAbsolutePath(),
       Field.Store.YES, Field.Index.NOT_ANALYZED));
     // 把document写入索引文件  
     writer.addDocument(d);
     System.out.println("add file: " + root.getAbsolutePath());
    } catch (FileNotFoundException e) {
     System.out.println("file not found, ignored.");
     e.printStackTrace();
    } catch (IOException e) {

    }
   }
  }
 }

}

 结果如下:

 

中华人民共和国(英文:The People's Republic of China,通常简称为中国(英文:China)[5],

 

位於亚洲东部、太平洋西岸,陆上从东北至西南分别与朝鲜、俄罗斯、蒙古、哈萨克斯坦、吉尔吉斯斯坦、塔吉克斯坦、
阿富汗、巴基斯坦、印度、尼泊尔、不丹、缅甸、老挝和越南等国家接壤,海上从东部至南部分别隔黄海、东海、南海与朝鲜半岛、日本列岛以及东南亚相望,是世界上陸地鄰國最多的國家,首都北京。国土辽阔,实际控制总面积约为959.67万平方千米[3](实际管辖区域),仅次于俄罗斯、加拿大而居世界第三;陆地总面积(不計河、湖)约932.64万平方千米,仅次于俄罗斯而列世界第二[6];中华人民共和国将行政區劃分为23个省、5个少数民族自治区、4个直辖市、以及2个特别行政区,但台湾不在中华人民共和国政府实际控制范围内(参见:台湾问题)。中华人民共和国是世界上人口最多的国家,人口总数超過13亿,佔全球人口的五分之一。境内民族众多,获得官方认可的民族有56个,其中汉族人口占绝大多数,其余55个民族被统称为少数民族。中华人民共和国境内的通用语言是汉语普通话,使用的文字是规范汉字(此即汉语簡化字),少数民族如壮族、维吾尔族、蒙古族、藏族、朝鲜族等拥有自己的文字。《中华人民共和国宪法》规定公民有宗教信仰自由,大部分公民无固定宗教信仰,部分人信仰佛教、道教、基督教和伊斯兰教等宗教。中华人民共和国共跨越五个时区,但全国皆使用單一的北京时间(东经120度)为标准时间。

《中华人民共和国宪法》规定中华人民共和国是工人阶级领导的、以工农联盟为基础的人民民主专政的社会主义国家;

 

 

搜索出来的:

 

中华人民<font color='red'>共和国</font>(英文:The People's Republic of China,通常简称为中国(英文:China)[5],

 

位於亚洲东部、太平洋西岸,陆上从东北至西南分别与朝鲜

 

只能匹配到一行

 

 使用paoding的话,却可以匹配到多处。

分享到:
评论
1 楼 hufuli 2012-03-05  
你用IK和solr结合应该就没有这个问题,估计是生成索引的时候的问题。

相关推荐

    IKAnalyzer3.2(稳定版)分词

    IKAnalyzer3.2(稳定版) 支持Lucene3

    IKAnalyzer3.2.0.zip

    IK Analyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 200 6 年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 3 个大版本。最初,它是以开源项目 Luence 为应用主体的,结合词典分词和文法...

    IkAnalyzer分词工具

    IkAnalyzer3.2的jar包 IK Analyzer 是一个开源的,基于java 语言开发的轻量级的中文分词工具包。从2006 年12 月推出1.0 版开始, IKAnalyzer 已经推出了3 个大版本。最初,它是以开源项目 Luence 为应用主体的,结合...

    IKAnalyzer2012完整分发包

    IK Analyzer安装包包含: 1. 《IKAnalyzer中文分词器V2012使用手册》(即本文档) 2. IKAnalyzer2012.jar(主jar包) 3. IKAnalyzer.cfg.xml(分词器扩展配置文件) 4. stopword.dic(停止词典) 5. LICENSE....

    IKAnalyzer中文分词器V3.2使用

    IKAnalyzer 中文分词器V3.2使用手册 lucene

    IKAnalyzer2012_u6中文分词器以及手册正式版.zip

    IKAnalyzer2012_u6中文分词器以及手册正式版 Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2017/10/29 1:41 doc -a---- 2017/10/29 1:41 414 IKAnalyzer.cfg.xml -a---- 2017/10/29 1...

    IKAnalyzer2012FF_u1.jar

    IKAnalyzer分词器版本 2012 兼容Lucene3.3以上版本 对solr1.4提供接口实现 使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IK...

    IKAnalyzer2012_FF_hf1.jar

    解决lucene4.0与IKAnalyzer的冲突。解决Exception in thread "main" java.lang.VerifyError: class org.wltea.analyzer.lucene.IKAnalyzer overrides final method tokenStream.(Ljava/lang/String;Ljava/io/Reader;...

    IKAnalyzer2012.jar

    IKAnalyzer2012.jar 中文分词包

    IKAnalyzer3.2.5Stable

    IKAnalyzer 非常不错的分词器,JAVA版本

    IKAnalyzer2012_u6中文分词器jar包

    IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包

    IKAnalyzer2012_u6

    IKAnalyzer2012_u6

    IKAnalyzer中文分词.rar

    IKAnalyzer继承Lucene的Analyzer抽象类,使用IKAnalyzer和Lucene自带的分析器方法一样,将Analyzer测试代码改为IKAnalyzer测试中文分词效果。 如果使用中文分词器ik-analyzer,就需要在索引和搜索程序中使用一致的...

    IKAnalyzer-5.0.jar及solr-analyzer-extra-5.3.jar

    IKAnalyzer-5.0.jar及solr-analyzer-extra-5.3.jar,用于solr5.3做中文分词

    IKAnalyzer2012FF_hf1.zip

    IKAnalyzer2012FF_hf1.zip FastDFS集群安装所需要的安装包

    IK Analyzer 2012FF_hf1.zip

    IK Analyzer 是一个开源的,基亍 java 语言开发的轻量级的中文分词工具包。从 2006年 12 月推出 1.0 版开始,IKAnalyzer 已经推出了 4 个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析...

    IK Analyzer 3.2.8中文分词器

    IK Analyzer是一个开源的,基于java诧言开发的轻量级的中文分词工具包. IK Analyzer安装包包含: 1. 《IKAnalyzer中文分词器V3.X使用手册》 2. IKAnalyzer3.X.jar(主jar包) 3. IKAnalyzer.cfg.xml(分词器扩展...

    IKAnalyzer中文分词支持lucene6.5.0版本

    由于林良益先生在2012之后未对IKAnalyzer进行更新,后续lucene分词接口发生变化,导致不可使用,所以此jar包支持lucene6.0以上版本

    IKAnalyzer配置文件、扩展词典和停用词词典.zip

    IKAnalyzer配置文件、扩展词典和停用词词典.zip

    IKAnalyzer2012_u3

    IK Analyzer 2012 IKAnalyzer2012_u3 IK Analyzer 2012 IKAnalyzer2012_u3 IK Analyzer 2012 IKAnalyzer2012_u3

Global site tag (gtag.js) - Google Analytics