java lucene 中文分词_lucene之中文分词及其高亮显示(五)

中文分词:即换个分词器

Analyzer analyzer = new StandardAnalyzer();// 标准分词器    换成SmartChineseAnalyzer analyzer = new SmartChineseAnalyzer();//要加入lucene-analyzers-common-5.3.1.jar

packagecom.wp.lucene;importjava.nio.file.Paths;importorg.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;importorg.apache.lucene.document.Document;importorg.apache.lucene.document.Field;importorg.apache.lucene.document.IntField;importorg.apache.lucene.document.StringField;importorg.apache.lucene.document.TextField;importorg.apache.lucene.index.IndexWriter;importorg.apache.lucene.index.IndexWriterConfig;importorg.apache.lucene.store.Directory;importorg.apache.lucene.store.FSDirectory;public classIndexer {private Integer ids[] = { 1, 2, 3};private String citys[] = { "青岛", "南京", "上海"};private String descs[] ={"青岛是一个美丽的城市。","南京是一个有文化的城市。南京是一个文化的城市南京,简称宁,是江苏省会,地处中国东部地区,长江下游,濒江近海。全市下辖11个区,总面积6597平方公里,2013年建成区面积752.83平方公里,常住人口818.78万,其中城镇人口659.1万人。[1-4] “江南佳丽地,金陵帝王州”,南京拥有着6000多年文明史、近2600年建城史和近500年的建都史,是中国四大古都之一,有“六朝古都”、“十朝都会”之称,是中华文明的重要发祥地,历史上曾数次庇佑华夏之正朔,长期是中国南方的政治、经济、文化中心,拥有厚重的文化底蕴和丰富的历史遗存。[5-7] 南京是国家重要的科教中心,自古以来就是一座崇文重教的城市,有“天下文枢”、“东南第一学”的美誉。截至2013年,南京有高等院校75所,其中211高校8所,仅次于北京上海;国家重点实验室25所、国家重点学科169个、两院院士83人,均居中国第三。[8-10] 。","上海是一个繁华的城市。"};privateDirectory dir;/*** 获取IndexWriter实例

*

*@return*@throwsException*/

private IndexWriter getWriter() throwsException {//Analyzer analyzer=new StandardAnalyzer();//标准分词器

SmartChineseAnalyzer analyzer = newSmartChineseAnalyzer();

IndexWriterConfig iwc= newIndexWriterConfig(analyzer);

IndexWriter writer= newIndexWriter(dir, iwc);returnwriter;

}/*** 生成索引

*

*@paramindexDir

*@throwsException*/

private void index(String indexDir) throwsException {

dir=FSDirectory.open(Paths.get(indexDir));

IndexWriter writer=getWriter();for (int i = 0; i < ids.length; i++) {

Document doc= newDocument();

doc.add(new IntField("id", ids[i], Field.Store.YES));

doc.add(new StringField("city", citys[i], Field.Store.YES));

doc.add(new TextField("desc", descs[i], Field.Store.YES));

writer.addDocument(doc);//添加文档

}

writer.close();

}public static void main(String[] args) throwsException {new Indexer().index("D:\\lucene\\luceneIndex");

}

}

高亮部分:在得到搜索结果后

QueryScorer scorer = new QueryScorer(query);// 查询得分

Fragmenter fragmenter = new SimpleSpanFragmenter(scorer);// 得到得分的片段,就是得到一段包含所查询的关键字的摘要

SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(

"", "");// 对查询的数据格式化;无参构造器的默认是将关键字加粗

Highlighter highlighter = new Highlighter(simpleHTMLFormatter, scorer);// 根据得分和格式化

highlighter.setTextFragmenter(fragmenter);// 设置成高亮

packagecom.wp.lucene;importjava.io.StringReader;importjava.nio.file.Paths;importorg.apache.lucene.analysis.TokenStream;importorg.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;importorg.apache.lucene.document.Document;importorg.apache.lucene.index.DirectoryReader;importorg.apache.lucene.index.IndexReader;importorg.apache.lucene.queryparser.classic.QueryParser;importorg.apache.lucene.search.IndexSearcher;importorg.apache.lucene.search.Query;importorg.apache.lucene.search.ScoreDoc;importorg.apache.lucene.search.TopDocs;importorg.apache.lucene.search.highlight.Fragmenter;importorg.apache.lucene.search.highlight.Highlighter;importorg.apache.lucene.search.highlight.QueryScorer;importorg.apache.lucene.search.highlight.SimpleHTMLFormatter;importorg.apache.lucene.search.highlight.SimpleSpanFragmenter;importorg.apache.lucene.store.Directory;importorg.apache.lucene.store.FSDirectory;public classSearcher {public static void search(String indexDir, String q) throwsException {

Directory dir=FSDirectory.open(Paths.get(indexDir));

IndexReader reader=DirectoryReader.open(dir);

IndexSearcher is= newIndexSearcher(reader);//Analyzer analyzer=new StandardAnalyzer();//标准分词器

SmartChineseAnalyzer analyzer = newSmartChineseAnalyzer();

QueryParser parser= new QueryParser("desc", analyzer);

Query query=parser.parse(q);long start =System.currentTimeMillis();

TopDocs hits= is.search(query, 10);long end =System.currentTimeMillis();

System.out.println("匹配 " + q + " ,总共花费" + (end - start) + "毫秒" + "查询到"

+ hits.totalHits + "个记录");

QueryScorer scorer= new QueryScorer(query);//查询得分

Fragmenter fragmenter = new SimpleSpanFragmenter(scorer);//得到得分的片段,就是得到一段包含所查询的关键字的摘要

SimpleHTMLFormatter simpleHTMLFormatter = newSimpleHTMLFormatter("", "");//对查询的数据格式化;无参构造器的默认是将关键字加粗

Highlighter highlighter = new Highlighter(simpleHTMLFormatter, scorer);//根据得分和格式化

highlighter.setTextFragmenter(fragmenter);//设置成高亮

for(ScoreDoc scoreDoc : hits.scoreDocs) {

Document doc=is.doc(scoreDoc.doc);

System.out.println(doc.get("city"));

System.out.println(doc.get("desc"));

String desc= doc.get("desc");if (desc != null) {

TokenStream tokenStream= analyzer.tokenStream("desc",new StringReader(desc));//TokenStream将查询出来的搞成片段,得到的是整个内容

System.out.println(highlighter.getBestFragment(tokenStream,

desc));//将权重高的摘要显示出来,得到的是关键字内容

}

}

reader.close();

}public static voidmain(String[] args) {

String indexDir= "D:\\lucene6";

String q= "南京文明";try{

search(indexDir, q);

}catch(Exception e) {

e.printStackTrace();

}

}

}

Java小生店铺:

手机端:搜索 java小生店铺

希望店铺的资料能帮助到你!!!

18334349f205bf4b4a65a5e30370275e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值