今天搞了一个关于Lucene的例子,权当入门教程。网上有很多资料,但是要么不全、要么不好用,所以这里把全部代码以及依赖的包贴上来了。

功能包括:创建索引、检索索引、高亮显示查询结果。分词使用的庖丁解牛。

使用前先下载相关的LuceneCore jar包、LuceneHighLighter jar包、庖丁解牛分分词jar包、庖丁解牛词典。并设定环境变量PAODING_DIC_HOME指向词典位置。

前两个可以到官方网站找,庖丁去http://code.google.com/p/paoding/downloads/list下载。

Lucene庖丁整合方式1:

1、将paoding-analysis.jar拷贝到项目的WEB-INF/lib目录;
2、接着需要设置环境变量PAODING_DIC_HOME,变量名:PAODING_DIC_HOME 变量值:E:\paoding\dic
3、第三步将E:\paoding\src目录下的paoding-dic-home.properties属性文件拷贝到项目的src目录下,添加2行

paoding.dic.home.config-fisrt=this
paoding.dic.home=E:/paoding/dic

Lucene庖丁整合方式2:

修改E:\paoding\src\paoding-dic-home.properties,增加一行

paoding.dic.home=classpath:dic

然后运行ant重新生成一个庖丁jar,拷贝到lib下就OK了。

第一种方式便于更新字典,第二种便于移植。本例使用第二种方法整合。

关于庖丁环境的设置可以参考net\paoding\analysis\Constants.java。

使用时注意LuceneCore和LuceneHighLighter的版本配置。我开始使用lucene-core-2.3.2.jar+Highlighter 2.4,后台报错,明显的版本问题。现在使用的是Lucene 2.3.2 + Highlighter 2.2.0。

主要代码实现:

CreateIndex:创建索引文件

Java代码
  1. package demo;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.util.Date;
  8. import net.paoding.analysis.analyzer.PaodingAnalyzer;
  9. import org.apache.lucene.analysis.Analyzer;
  10. import org.apache.lucene.document.Document;
  11. import org.apache.lucene.document.Field;
  12. import org.apache.lucene.index.IndexWriter;
  13. /**
  14. * 建立索引
  15. *
  16. */
  17. public class CreateIndex {
  18. public void createIndex() throws Exception {
  19. /* 指明要索引文件夹的位置,这里是C盘的S文件夹下 */
  20. File surceFileDir = new File("D:\\save\\source");
  21. /* 这里放索引文件的位置 */
  22. File indexFileDir = new File("D:\\save");
  23. //Analyzer luceneAnalyzer = new StandardAnalyzer();
  24. Analyzer luceneAnalyzer = new PaodingAnalyzer();//使用庖丁解牛分词法
  25. IndexWriter indexWriter = new IndexWriter(indexFileDir, luceneAnalyzer, true);///参数isEmpty是false表示增量索引
  26. File[] sourceFextFiles = surceFileDir.listFiles();
  27. long startTime = new Date().getTime();
  28. // 增加document到索引去
  29. for (int i = 0; i < sourceFextFiles.length; i++) {
  30. if (sourceFextFiles[i].isFile()
  31. && sourceFextFiles[i].getName().endsWith(".txt")) {
  32. System.out.println("File " + sourceFextFiles[i].getCanonicalPath() + "正在被索引....");
  33. String temp = FileReaderAll(sourceFextFiles[i].getCanonicalPath(), "GBK");
  34. System.out.println(temp);
  35. Document document = new Document();
  36. Field FieldPath = new Field("path", sourceFextFiles[i].getPath(), Field.Store.YES, Field.Index.NO);
  37. Field FieldBody = new Field("body", temp, Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
  38. Field FieldTitle = new Field("title", temp, Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
  39. document.add(FieldPath);
  40. document.add(FieldBody);document.add(FieldTitle);
  41. indexWriter.addDocument(document);
  42. }
  43. }
  44. // optimize()方法是对索引进行优化
  45. indexWriter.optimize();
  46. indexWriter.close();
  47. // 测试一下索引的时间
  48. long endTime = new Date().getTime();
  49. System.out.println("这花费了" + (endTime - startTime) + " 毫秒来把文档增加到索引里面去!"
  50. + indexFileDir.getPath());
  51. }
  52. public static String FileReaderAll(String FileName, String charset)
  53. throws IOException {
  54. BufferedReader reader = new BufferedReader(new InputStreamReader(
  55. new FileInputStream(FileName), charset));
  56. String line = new String();
  57. String temp = new String();
  58. while ((line = reader.readLine()) != null) {
  59. temp += line;
  60. }
  61. reader.close();
  62. return temp;
  63. }
  64. /**
  65. * @param args
  66. */
  67. public static void main(String[] args) {
  68. try {
  69. new CreateIndex().createIndex();
  70. catch (Exception e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. }
package demo;   import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;   import net.paoding.analysis.analyzer.PaodingAnalyzer;   import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;   /**  * 建立索引  *   */
public class CreateIndex {   public void createIndex() throws Exception {   /* 指明要索引文件夹的位置,这里是C盘的S文件夹下 */  File surceFileDir = new File("D:\\save\\source");   /* 这里放索引文件的位置 */  File indexFileDir = new File("D:\\save");   //Analyzer luceneAnalyzer = new StandardAnalyzer();   Analyzer luceneAnalyzer = new PaodingAnalyzer();//使用庖丁解牛分词法   IndexWriter indexWriter = new IndexWriter(indexFileDir, luceneAnalyzer, true);///参数isEmpty是false表示增量索引   File[] sourceFextFiles = surceFileDir.listFiles();   long startTime = new Date().getTime();   // 增加document到索引去   for (int i = 0; i < sourceFextFiles.length; i++) {   if (sourceFextFiles[i].isFile()   && sourceFextFiles[i].getName().endsWith(".txt")) {   System.out.println("File " + sourceFextFiles[i].getCanonicalPath() + "正在被索引....");   String temp = FileReaderAll(sourceFextFiles[i].getCanonicalPath(), "GBK");   System.out.println(temp);   Document document = new Document();   Field FieldPath = new Field("path", sourceFextFiles[i].getPath(), Field.Store.YES, Field.Index.NO);   Field FieldBody = new Field("body", temp, Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);   Field FieldTitle = new Field("title", temp, Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);   document.add(FieldPath);   document.add(FieldBody);document.add(FieldTitle);   indexWriter.addDocument(document);   }   }   // optimize()方法是对索引进行优化   indexWriter.optimize();   indexWriter.close();   // 测试一下索引的时间   long endTime = new Date().getTime();   System.out.println("这花费了" + (endTime - startTime) + " 毫秒来把文档增加到索引里面去!"  + indexFileDir.getPath());   }   public static String FileReaderAll(String FileName, String charset)   throws IOException {   BufferedReader reader = new BufferedReader(new InputStreamReader(   new FileInputStream(FileName), charset));   String line = new String();   String temp = new String();   while ((line = reader.readLine()) != null) {   temp += line;   }   reader.close();   return temp;   }   /**  * @param args  */  public static void main(String[] args) {   try {   new CreateIndex().createIndex();   } catch (Exception e) {   e.printStackTrace();   }   }   }

QueryHighLighter:检索关键字并高亮显示

Java代码
  1. package demo;
  2. import java.io.StringReader;
  3. import net.paoding.analysis.analyzer.PaodingAnalyzer;
  4. import org.apache.lucene.analysis.Analyzer;
  5. import org.apache.lucene.analysis.TokenStream;
  6. import org.apache.lucene.document.Document;
  7. import org.apache.lucene.queryParser.QueryParser;
  8. import org.apache.lucene.search.BooleanClause;
  9. import org.apache.lucene.search.IndexSearcher;
  10. import org.apache.lucene.search.Query;
  11. import org.apache.lucene.search.ScoreDoc;
  12. import org.apache.lucene.search.TopDocCollector;
  13. import org.apache.lucene.search.highlight.Highlighter;
  14. import org.apache.lucene.search.highlight.QueryScorer;
  15. import org.apache.lucene.search.highlight.SimpleFragmenter;
  16. import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
  17. import test.TestLuceneHighlighter2;
  18. /**
  19. * 高亮显示检索结果
  20. * Lucene 2.3.2 + Highlighter 2.2.0 的分页+高亮显示代码例子.<br>
  21. * Lucene和Highlighter不是最新版本可以升级。
  22. */
  23. public class QueryHighLighter {
  24. private static final String FIELD_TITLE = "title";
  25. private static final String FIELD_BODY = "body";
  26. public synchronized Analyzer getAnalyzer() {
  27. return new PaodingAnalyzer();// 此处使用"庖丁解牛"分词法,另外一种是中科院分词法
  28. }
  29. public String test(String queryString, int begin, int number) {
  30. StringBuffer sb = new StringBuffer();
  31. IndexSearcher isearcher = null;
  32. try {
  33. isearcher = new IndexSearcher("D:\\save");
  34. /* 下面这个表示要同时搜索这两个域,而且只要一个域里面有满足我们搜索的内容就行 */
  35. BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD,
  36. BooleanClause.Occur.SHOULD };
  37. TopDocCollector collector = new TopDocCollector(10);
  38. /*Query query = MultiFieldQueryParser.parse(queryString,
  39. new String[] { FIELD_TITLE, FIELD_BODY }, clauses,
  40. getAnalyzer());*/
  41. QueryParser queryParse = new QueryParser(FIELD_TITLE, getAnalyzer());
  42. Query query = queryParse.parse(queryString);
  43. isearcher.search(query, collector);
  44. ScoreDoc[] hits = collector.topDocs().scoreDocs;
  45. // 用这个进行高亮显示,默认是<b>..</b>
  46. // 用这个指定<read>..</read>
  47. SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");
  48. // 构造高亮
  49. // 指定高亮的格式
  50. // 指定查询评分
  51. Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));
  52. // 这个一般等于你要返回的,高亮的数据长度
  53. // 如果太小,则只有数据的开始部分被解析并高亮,且返回的数据也少
  54. // 太大,有时太浪费了。
  55. highlighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE));
  56. for (int i = begin; i < hits.length && i < begin + number; i++) {
  57. Document doc = isearcher.doc(hits[i].doc);
  58. String value = doc.get(FIELD_TITLE);
  59. String value2 = doc.get(FIELD_BODY);
  60. // 有三个参数
  61. // 分析器
  62. // 要解析的字段名
  63. // 要解析的数据
  64. //System.out.println(highlighter.getBestFragment(getAnalyzer(),
  65. //      FIELD_TITLE, doc.get(FIELD_TITLE)));
  66. if (value != null) {
  67. TokenStream tokenStream = getAnalyzer().tokenStream(FIELD_TITLE, new StringReader(value));
  68. String str = highlighter.getBestFragment(tokenStream, value);
  69. sb.append("<li><li>").append(str).append("<br/>");
  70. System.out.println(str);
  71. }
  72. }
  73. catch (Exception e) {
  74. e.printStackTrace();
  75. finally {
  76. if (isearcher != null) {
  77. try {
  78. isearcher.close();
  79. catch (Exception e) {
  80. e.printStackTrace();
  81. }
  82. }
  83. }
  84. return sb.toString();
  85. }
  86. public static void main(String[] args){
  87. TestLuceneHighlighter2 t = new TestLuceneHighlighter2();
  88. String queryString = "中华人民共和国";
  89. int begin = 0;
  90. int number = 10;
  91. t.test(queryString, begin, number);
  92. }
  93. }
  94. package demo;
  95. import java.io.StringReader;
  96. import net.paoding.analysis.analyzer.PaodingAnalyzer;
  97. import org.apache.lucene.analysis.Analyzer;
  98. import org.apache.lucene.analysis.TokenStream;
  99. import org.apache.lucene.document.Document;
  100. import org.apache.lucene.queryParser.QueryParser;
  101. import org.apache.lucene.search.BooleanClause;
  102. import org.apache.lucene.search.IndexSearcher;
  103. import org.apache.lucene.search.Query;
  104. import org.apache.lucene.search.ScoreDoc;
  105. import org.apache.lucene.search.TopDocCollector;
  106. import org.apache.lucene.search.highlight.Highlighter;
  107. import org.apache.lucene.search.highlight.QueryScorer;
  108. import org.apache.lucene.search.highlight.SimpleFragmenter;
  109. import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
  110. import test.TestLuceneHighlighter2;
  111. /**
  112. * 高亮显示检索结果
  113. * Lucene 2.3.2 + Highlighter 2.2.0 的分页+高亮显示代码例子.<br>
  114. * Lucene和Highlighter不是最新版本可以升级。
  115. */
  116. public class QueryHighLighter {
  117. private static final String FIELD_TITLE = "title";
  118. private static final String FIELD_BODY = "body";
  119. public synchronized Analyzer getAnalyzer() {
  120. return new PaodingAnalyzer();// 此处使用"庖丁解牛"分词法,另外一种是中科院分词法
  121. }
  122. public String test(String queryString, int begin, int number) {
  123. StringBuffer sb = new StringBuffer();
  124. IndexSearcher isearcher = null;
  125. try {
  126. isearcher = new IndexSearcher("D:\\save");
  127. /* 下面这个表示要同时搜索这两个域,而且只要一个域里面有满足我们搜索的内容就行 */
  128. BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD,
  129. BooleanClause.Occur.SHOULD };
  130. TopDocCollector collector = new TopDocCollector(10);
  131. /*Query query = MultiFieldQueryParser.parse(queryString,
  132. new String[] { FIELD_TITLE, FIELD_BODY }, clauses,
  133. getAnalyzer());*/
  134. QueryParser queryParse = new QueryParser(FIELD_TITLE, getAnalyzer());
  135. Query query = queryParse.parse(queryString);
  136. isearcher.search(query, collector);
  137. ScoreDoc[] hits = collector.topDocs().scoreDocs;
  138. // 用这个进行高亮显示,默认是<b>..</b>
  139. // 用这个指定<read>..</read>
  140. SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");
  141. // 构造高亮
  142. // 指定高亮的格式
  143. // 指定查询评分
  144. Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));
  145. // 这个一般等于你要返回的,高亮的数据长度
  146. // 如果太小,则只有数据的开始部分被解析并高亮,且返回的数据也少
  147. // 太大,有时太浪费了。
  148. highlighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE));
  149. for (int i = begin; i < hits.length && i < begin + number; i++) {
  150. Document doc = isearcher.doc(hits[i].doc);
  151. String value = doc.get(FIELD_TITLE);
  152. String value2 = doc.get(FIELD_BODY);
  153. // 有三个参数
  154. // 分析器
  155. // 要解析的字段名
  156. // 要解析的数据
  157. //System.out.println(highlighter.getBestFragment(getAnalyzer(),
  158. //      FIELD_TITLE, doc.get(FIELD_TITLE)));
  159. if (value != null) {
  160. TokenStream tokenStream = getAnalyzer().tokenStream(FIELD_TITLE, new StringReader(value));
  161. String str = highlighter.getBestFragment(tokenStream, value);
  162. sb.append("<li><li>").append(str).append("<br/>");
  163. System.out.println(str);
  164. }
  165. }
  166. catch (Exception e) {
  167. e.printStackTrace();
  168. finally {
  169. if (isearcher != null) {
  170. try {
  171. isearcher.close();
  172. catch (Exception e) {
  173. e.printStackTrace();
  174. }
  175. }
  176. }
  177. return sb.toString();
  178. }
  179. public static void main(String[] args){
  180. TestLuceneHighlighter2 t = new TestLuceneHighlighter2();
  181. String queryString = "中华人民共和国";
  182. int begin = 0;
  183. int number = 10;
  184. t.test(queryString, begin, number);
  185. }
  186. }
package demo;   import java.io.StringReader;   import net.paoding.analysis.analyzer.PaodingAnalyzer;   import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocCollector;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;   import test.TestLuceneHighlighter2;   /**  * 高亮显示检索结果  * Lucene 2.3.2 + Highlighter 2.2.0 的分页+高亮显示代码例子.<br>  * Lucene和Highlighter不是最新版本可以升级。  */
public class QueryHighLighter {   private static final String FIELD_TITLE = "title";   private static final String FIELD_BODY = "body";   public synchronized Analyzer getAnalyzer() {   return new PaodingAnalyzer();// 此处使用"庖丁解牛"分词法,另外一种是中科院分词法   }   public String test(String queryString, int begin, int number) {   StringBuffer sb = new StringBuffer();   IndexSearcher isearcher = null;   try {   isearcher = new IndexSearcher("D:\\save");   /* 下面这个表示要同时搜索这两个域,而且只要一个域里面有满足我们搜索的内容就行 */  BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD,   BooleanClause.Occur.SHOULD };   TopDocCollector collector = new TopDocCollector(10);   /*Query query = MultiFieldQueryParser.parse(queryString,  new String[] { FIELD_TITLE, FIELD_BODY }, clauses,  getAnalyzer());*/  QueryParser queryParse = new QueryParser(FIELD_TITLE, getAnalyzer());      Query query = queryParse.parse(queryString);     isearcher.search(query, collector);   ScoreDoc[] hits = collector.topDocs().scoreDocs;   // 用这个进行高亮显示,默认是<b>..</b>   // 用这个指定<read>..</read>   SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");   // 构造高亮   // 指定高亮的格式   // 指定查询评分   Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));   // 这个一般等于你要返回的,高亮的数据长度   // 如果太小,则只有数据的开始部分被解析并高亮,且返回的数据也少   // 太大,有时太浪费了。   highlighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE));   for (int i = begin; i < hits.length && i < begin + number; i++) {   Document doc = isearcher.doc(hits[i].doc);   String value = doc.get(FIELD_TITLE);   String value2 = doc.get(FIELD_BODY);   // 有三个参数   // 分析器   // 要解析的字段名   // 要解析的数据   //System.out.println(highlighter.getBestFragment(getAnalyzer(),   //      FIELD_TITLE, doc.get(FIELD_TITLE)));   if (value != null) {   TokenStream tokenStream = getAnalyzer().tokenStream(FIELD_TITLE, new StringReader(value));   String str = highlighter.getBestFragment(tokenStream, value);   sb.append("<li><li>").append(str).append("<br/>");   System.out.println(str);   }    }   } catch (Exception e) {   e.printStackTrace();   } finally {   if (isearcher != null) {   try {   isearcher.close();   } catch (Exception e) {   e.printStackTrace();   }   }   }   return sb.toString();   }   public static void main(String[] args){   TestLuceneHighlighter2 t = new TestLuceneHighlighter2();   String queryString = "中华人民共和国";   int begin = 0;   int number = 10;   t.test(queryString, begin, number);   }   }  package demo;import java.io.StringReader;import net.paoding.analysis.analyzer.PaodingAnalyzer;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocCollector;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;import test.TestLuceneHighlighter2;/*** 高亮显示检索结果* Lucene 2.3.2 + Highlighter 2.2.0 的分页+高亮显示代码例子.<br>* Lucene和Highlighter不是最新版本可以升级。*/
public class QueryHighLighter {private static final String FIELD_TITLE = "title";private static final String FIELD_BODY = "body";public synchronized Analyzer getAnalyzer() {return new PaodingAnalyzer();// 此处使用"庖丁解牛"分词法,另外一种是中科院分词法}public String test(String queryString, int begin, int number) {StringBuffer sb = new StringBuffer();IndexSearcher isearcher = null;try {isearcher = new IndexSearcher("D:\\save");/* 下面这个表示要同时搜索这两个域,而且只要一个域里面有满足我们搜索的内容就行 */BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD,BooleanClause.Occur.SHOULD };TopDocCollector collector = new TopDocCollector(10);/*Query query = MultiFieldQueryParser.parse(queryString,new String[] { FIELD_TITLE, FIELD_BODY }, clauses,getAnalyzer());*/QueryParser queryParse = new QueryParser(FIELD_TITLE, getAnalyzer());   Query query = queryParse.parse(queryString);  isearcher.search(query, collector);ScoreDoc[] hits = collector.topDocs().scoreDocs;// 用这个进行高亮显示,默认是<b>..</b>// 用这个指定<read>..</read>SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");// 构造高亮// 指定高亮的格式// 指定查询评分Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));// 这个一般等于你要返回的,高亮的数据长度// 如果太小,则只有数据的开始部分被解析并高亮,且返回的数据也少// 太大,有时太浪费了。highlighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE));for (int i = begin; i < hits.length && i < begin + number; i++) {Document doc = isearcher.doc(hits[i].doc);String value = doc.get(FIELD_TITLE);String value2 = doc.get(FIELD_BODY);// 有三个参数// 分析器// 要解析的字段名// 要解析的数据//System.out.println(highlighter.getBestFragment(getAnalyzer(),//     FIELD_TITLE, doc.get(FIELD_TITLE)));if (value != null) {TokenStream tokenStream = getAnalyzer().tokenStream(FIELD_TITLE, new StringReader(value));String str = highlighter.getBestFragment(tokenStream, value);sb.append("<li><li>").append(str).append("<br/>");System.out.println(str);} }} catch (Exception e) {e.printStackTrace();} finally {if (isearcher != null) {try {isearcher.close();} catch (Exception e) {e.printStackTrace();}}}return sb.toString();}public static void main(String[] args){TestLuceneHighlighter2 t = new TestLuceneHighlighter2();String queryString = "中华人民共和国";int begin = 0;int number = 10;t.test(queryString, begin, number);}}

附加上传net\paoding\analysis\Constants.java便于理解参数设置:

Java代码
  1. package net.paoding.analysis;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import java.util.Properties;
  5. /**
  6. *
  7. * @author Zhiliang Wang [qieqie.wang@gmail.com]
  8. *
  9. * @since 2.0.0
  10. */

HighLighter相关推荐

  1. Highlighter与BooleanQuery查询

    2019独角兽企业重金招聘Python工程师标准>>> 查询这个功能很强大,也可以说是lucene搜索最重要的功能之一,但是这个功能对英文也来比较好用,对中文支持来说,就不那么理想了 ...

  2. wordpress文章中插入代码高亮显示插件 Crayon Syntax Highlighter

    最近用wordpress搭了个个人博客,但是原版编辑器插入代码不能高亮显示就很难受.经过多重筛选最终选择了插件Crayon Syntax Highlighter,支持主题数量较多,且功能较全. 启用后 ...

  3. sublime插件推荐之Color Highlighter

    作为一名有追求的FEr, 颜色没有示意怎么行? 这个功能vscode已经自带了, 然而sublime还要安装插件才行. 我安装的是Color Highlighter插件, 感觉还不错, 这里作一个分享 ...

  4. Django-Haystack 全文检索之highlight 标签和自定义Highlighter

    Django-Haystack 全文检索之highlight 标签和自定义Highlighter haystack highlight 标签的用法 highlight 标签的实现逻辑 highligh ...

  5. java中getbest_Java Highlighter.getBestFragment方法代碼示例

    本文整理匯總了Java中org.apache.lucene.search.highlight.Highlighter.getBestFragment方法的典型用法代碼示例.如果您正苦於以下問題:Jav ...

  6. Qt 富文本处理(23): Syntax Highlighter Example【来自官档的翻译】

    Syntax Highlighter Example 官方案例 语法高亮案例显示了如何执行简单的语法突出显示. 语法高亮应用程序显示了C ++文件使用自定义的语法高亮. 该示例包含两个类: Highl ...

  7. 【Lucene】三个高亮显示模块的简单示例-Highlighter

    Lucene针对高亮显示功能提供了两种实现方式,分别是Highlighter和FastVectorHighlighter 这里的三个示例都是使用Highlighter: 示例代码: package c ...

  8. 解决sublime text 3中color highlight和color highlighter插件无法正常运行的问题

    问题描述: 安装了color highlighter后,发现该插件没有作用,按照网上的操作做了一遍也不行,后来看到有人说可以安装color highlight,但是安装之后还是不行. 解决办法: 还是 ...

  9. Lucene highlighter高亮显示

    2019独角兽企业重金招聘Python工程师标准>>> 这个功能非常重要,先贴代码出来: public class HighlighterTest {public static vo ...

最新文章

  1. 几何分布的期望和方差
  2. 机器学习(6)--化无限为有限(二)
  3. Python基础知识之文件的读取操作
  4. Delphi开发人员的编程习惯
  5. VTK:绘图之StackedBar
  6. php 年的第几天,收藏-php中某年第几天计算出日期年月日的代码
  7. jupyternotebook 报告_基本操作!在VS 代码中如何使用Jupyter Notebook
  8. PowerDesigner(一)-PowerDesigner概述(系统分析与建模)
  9. solr与zookeeper搭建solrcloud分布式索引服务实例
  10. mycelipse中关于编码的配置
  11. 【优化算法】白鲨优化算法(WSO)【含Matlab源码 623期】
  12. 多个安卓设备投屏到电脑_如何将多个安卓手机投屏到电脑端
  13. 代理商为何要卖增值业务?
  14. 屏蔽所有统计代码(51.la cnzz 百度统计 谷歌分析师adsense、屏蔽淘宝客广告代码)的方法
  15. 用人话说说文明和文化
  16. 佩服的一个阿里 P9 大佬,离职了...
  17. 微信小程序接入环信客服
  18. 基于matlab的调用电脑摄像头,截取视频图像识别颜色
  19. ua识别(浏览器标识识别)
  20. cgb2110-day05

热门文章

  1. 物联网卡设置_聆听物联物联网卡APN设置教程
  2. 网站建设之一个优秀网站具备的几大特点
  3. 测试环境问题排查的那些事儿
  4. PDO、DAO、ORM之间的区别
  5. Axis2调用WebService服务的3种方式(rpc调用不好用)
  6. Pytorch中光标变粗的解决
  7. Word修改全部英文以及数字的字体
  8. 业内首次冰品AI识别,爱莫科技全面赋能冰淇淋数字化营销
  9. PSR-0与PSR-4
  10. 萌新的Canvas笔记(四)