lucene3.0+版本中文分词测试+搜索结果+创建索引测试

原创 2015年07月10日 12:02:22

lucene3.0+版本中文分词测试+搜索结果+创建索引测试


  1. import java.io.File;  
  2. import java.io.IOException;  
  3. import java.io.StringReader;  
  4. import org.apache.lucene.analysis.Analyzer;  
  5. import org.apache.lucene.analysis.TokenStream;  
  6. import org.apache.lucene.analysis.tokenattributes.TermAttribute;  
  7. import org.apache.lucene.document.Document;  
  8. import org.apache.lucene.document.Field;  
  9. import org.apache.lucene.document.Field.Index;  
  10. import org.apache.lucene.document.Field.Store;  
  11. import org.apache.lucene.index.CorruptIndexException;  
  12. import org.apache.lucene.index.IndexWriter;  
  13. import org.apache.lucene.index.IndexWriter.MaxFieldLength;  
  14. import org.apache.lucene.queryParser.ParseException;  
  15. import org.apache.lucene.queryParser.QueryParser;  
  16. import org.apache.lucene.search.IndexSearcher;  
  17. import org.apache.lucene.search.Query;  
  18. import org.apache.lucene.search.ScoreDoc;  
  19. import org.apache.lucene.search.TopDocs;  
  20. import org.apache.lucene.search.highlight.Highlighter;  
  21. import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;  
  22. import org.apache.lucene.search.highlight.QueryScorer;  
  23. import org.apache.lucene.search.highlight.SimpleFragmenter;  
  24. import org.apache.lucene.search.highlight.SimpleHTMLFormatter;  
  25. import org.apache.lucene.store.FSDirectory;  
  26. import org.apache.lucene.store.LockObtainFailedException;  
  27. import org.apache.lucene.util.Version;  
  28. import org.wltea.analyzer.lucene.IKAnalyzer;  
  29. public class AnalzyerTest {  
  30.     /** 
  31.      * lucene3.0开始已经抛弃了原来的分词方式,转而使用新的分词方式<br> 
  32.      * 本方法以SmartChineseAnalyzer为例,演示如何分词以及取得分词之后的term 
  33.      * http://blog.csdn.net/yjflinchong/article/details/7906116 
  34.      * @throws Exception 
  35.      */  
  36.     public static void analysis() throws Exception {  
  37.         Analyzer analyzer = new IKAnalyzer();  
  38.         String string = "据外媒报道,菲律宾国防部长加斯明9日称,多种新式战机、船只将于年内陆续交付军方,菲国防实力将得到大幅增强。但加斯明同时强调,此次军备采购与黄岩岛争端无关。";  
  39.         StringReader reader = new StringReader(string);  
  40.         TokenStream ts = analyzer.tokenStream("", reader);  
  41.         TermAttribute termAttribute = ts.getAttribute(TermAttribute.class);  
  42.         while (ts.incrementToken()) {  
  43.             System.out.println(termAttribute.term() + "  ");  
  44.         }  
  45.         System.out.println();  
  46.     }  
  47.     /** 
  48.      * 建索引 
  49.      * 在构造IndexWriter时必须使用Directory作为参数了 
  50.      *  
  51.      * @throws CorruptIndexException 
  52.      * @throws LockObtainFailedException 
  53.      * @throws IOException 
  54.      */  
  55.     private static void build() throws CorruptIndexException, LockObtainFailedException, IOException {  
  56.         String path = "index";  
  57.         IndexWriter writer = new IndexWriter(FSDirectory.open(new File(path)), new IKAnalyzer(), true, MaxFieldLength.LIMITED);  
  58.         Document document = new Document();  
  59.         document.add(new Field("text""中国人民银行采取了一系列措施防止人民币升值,但是很遗憾,这些措施在今天看来其作用是微乎其微的。难道真的就没有什么别的措施防止人民币再次疯狂升值了吗?", Store.YES, Index.ANALYZED));  
  60.         writer.addDocument(document);  
  61.         writer.optimize();  
  62.         writer.close();  
  63.     }  
  64.     /** 
  65.      *  
  66.      * @param keyword 
  67.      * @throws CorruptIndexException 
  68.      * @throws IOException 
  69.      * @throws ParseException 
  70.      * @throws InvalidTokenOffsetsException 
  71.      */  
  72.     private static void search(String keyword) throws CorruptIndexException, IOException, ParseException, InvalidTokenOffsetsException {  
  73.         Analyzer analyzer = new IKAnalyzer();  
  74.         QueryParser parser = new QueryParser(Version.LUCENE_30, "text", analyzer);  
  75.         IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("index")));  
  76.         Query query = parser.parse(keyword);  
  77.         System.out.println(query);  
  78.         TopDocs topDocs = searcher.search(query, 10);  
  79.         ScoreDoc[] scoreDocs = topDocs.scoreDocs;  
  80.         System.out.println("hits:" + topDocs.totalHits);  
  81.         for (ScoreDoc scoreDoc : scoreDocs) {  
  82.             Document doc = searcher.doc(scoreDoc.doc);  
  83.             String text = doc.get("text");  
  84.             System.out.println(highlight(text, query, analyzer));  
  85.         }  
  86.     }  
  87.     /** 
  88.      * 高亮关键词 
  89.      * http://blog.csdn.net/yjflinchong/article/details/7906116 
  90.      * @param content 
  91.      *            需要高亮的内容 
  92.      * @param query 
  93.      *            搜索时使用的Query对象 
  94.      * @param analyzer 
  95.      *            分词器 
  96.      * @return 高亮之后的文本 
  97.      * @throws IOException 
  98.      * @throws InvalidTokenOffsetsException 
  99.      */  
  100.     private static String highlight(String content, Query query, Analyzer analyzer) throws IOException, InvalidTokenOffsetsException {  
  101.         SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<b>""</b>");  
  102.         Highlighter highlighter = new Highlighter(formatter, new QueryScorer(query));  
  103.         highlighter.setTextFragmenter(new SimpleFragmenter(100));  
  104.         String resultString = highlighter.getBestFragment(analyzer.tokenStream(""new StringReader(content)), content);  
  105.         return resultString + "...";  
  106.     }  
  107.     public static void main(String[] args) throws Exception {  
  108.         analysis();  
  109.         build();  
  110.         search("人民币 升值");  
  111.     }  
  112. }  
版权声明:本文为博主http://www.feixueteam.net原创文章,未经博主允许不得转载。

Lucene分词器测试

Lucene分词器测试

lucene全文搜索之四:创建索引搜索器、6种文档搜索器实现以及搜索结果分析(结合IKAnalyzer分词器的搜索器)基于lucene5.5.3

前言: 前面几章已经很详细的讲解了如何创建索引器对索引进行增删查(没有更新操作)、如何管理索引目录以及如何使用分词器,上一章讲解了如何生成索引字段和创建索引文档,并把创建的索引文档保存到索引目录,到这...
  • eguid_1
  • eguid_1
  • 2016年11月09日 11:17
  • 1088

在lucene中使用ictclas算法 实现对中文分词索引

在lucene中使用ictclas算法分词研究2010-03-29 16:38:51阅读132评论0  字号:大中小 订阅给Lucene加入性能更好的中文分词       Lucene本身的Stand...

Lucene 中文分词、分页、高亮 索引TXT

1、所用的Jar包 lucene-core-4.7.2.jar lucene-analyzers-common-4.7.2.jar lucene-queryparser-4.7.2.ja...

lucene 中文分词 内存索引

//package org.wltea.analyzer.sample; import java.io.IOException; import org.apache.lucene....
  • fanpeii
  • fanpeii
  • 2012年05月12日 21:47
  • 1842

lucene3.6 中文分词 文件索引

import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java...
  • fanpeii
  • fanpeii
  • 2012年05月12日 21:43
  • 2076

lucene的建立索引,搜索,中文分词

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包。 现在最新的lucene已经更新到6.0版本了。但是这个最新版,需要适配jdk1.80...

【Lucene3.6.2入门系列】第14节_SolrJ操作索引和搜索文档以及整合中文分词

[java] view plaincopyprint? package com.jadyer.solrj;      import java.util.ArrayLi...
  • hzd_123
  • hzd_123
  • 2014年04月22日 16:05
  • 477

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

  • 2017年03月28日 16:30
  • 5.46MB
  • 下载

中文分词-lucene 第二个版本

jar包 IKAnalyzer2012FF_u1.jar lucene-core-4.6.1.jar lucene-queryparser-4.6.1.jar api:  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lucene3.0+版本中文分词测试+搜索结果+创建索引测试
举报原因:
原因补充:

(最多只允许输入30个字)