<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>好开发</title>
	<atom:link href="http://www.icartype.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.icartype.com</link>
	<description>被诅咒的程序猿</description>
	<lastBuildDate>Tue, 15 Oct 2019 01:49:00 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0</generator>
	<item>
		<title>java实现操作kubernets api</title>
		<link>http://www.icartype.com/?p=226</link>
		<comments>http://www.icartype.com/?p=226#comments</comments>
		<pubDate>Tue, 15 Oct 2019 01:49:00 +0000</pubDate>
		<dc:creator><![CDATA[lidasheng]]></dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.icartype.com/?p=226</guid>
		<description><![CDATA[最近需要用java连接kubernets api操作k8s的service、rc等，做个记录

1.https://github.com/kubernetes-client/java/下载开源k8s客户端

2.k8s server api默认监听6443端口，上代码：

ApiClient apiClient = new ApiClient();
apiClient.setBasePath("https://12.6.89.6:6443");//api server地址
apiClient.setVerifyingSsl(false);//设置不验证ssl证书，因为自己的证书都是不可信任的
String token = "sghkdsjgheruighkj";//k8s  server的token
apiClient.addDefaultHeader("Authorization", "Bearer "+token);
api = new CoreV1Api(apiClient);//获得登录连接api

//创建ReplicationController

api.createNamespacedReplicationController("default", body, "false", null, null);

//创建service

api.createNamespacedService("default", body, "false", null, null);

这样就能连接k8s server api 进行远程操作。

&#160;]]></description>
		<wfw:commentRss>http://www.icartype.com/?feed=rss2&#038;p=226</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>powerdesigner在实体图中显示列注释</title>
		<link>http://www.icartype.com/?p=218</link>
		<comments>http://www.icartype.com/?p=218#comments</comments>
		<pubDate>Thu, 23 Mar 2017 03:53:07 +0000</pubDate>
		<dc:creator><![CDATA[lidasheng]]></dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.icartype.com/?p=218</guid>
		<description><![CDATA[在powerdesigner中选择

Tools-&#62;Display Preferences-&#62;Content-&#62;Table-&#62;Advanced...-&#62;Columns-&#62;select
<img title="powerdesigner显示注释" alt="" name="image_operate_30801361859581198" />

选中Code后，将它上移到第一位
<img title="powerdesigner显示注释" alt="" name="image_operate_61281361859572149" />

这样可以将code、name、type三项显示在ER图中，然后运行脚本，将注释comment的内容替换到code或name中，即可。

&#160;

PowerDesigner拥有强大的建模功能，同时，它也对脚本语言提供了支持。菜单Tools -&#62; Execute Commands -&#62; Edit/Run Script打开的窗口中，可以执行用户编写的VBS脚本，某些情况下，这可以节省大量的重复性工作，达到提高效率的目的。

vbs文件内容：

Option Explicit
ValidationMode = True
InteractiveMode = im_Batch

Dim system, file
Set system = CreateObject("Scripting.FileSystemObject")
Dim ForReading, ForWriting, ForAppending <wbr /> <wbr /> '打开文件选项
ForReading <wbr /> <wbr /> = 1 ' 只读
ForWriting <wbr /> <wbr /> = 2 ' 可写
ForAppending = 8 ' 可写并追加
'打开文本文件
Set file = system.OpenTextFile("C:\pdcomment.txt", ForWriting, true)

'判断当前model是否物理数据模型
Dim mdl
Set mdl = ActiveModel
If (mdl Is Nothing) Then
<wbr /> <wbr /> MsgBox "处理对象无模型"
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then
<wbr /> <wbr /> MsgBox "当前模型不是物理数据模型"
Else
<wbr /> <wbr /> ProcessFolder mdl,file
End If
file.Close

'******************************************************************************
Private sub ProcessFolder(folder,file)

Dim i,j,k
i=0:j=0:k=0

'列数组，记录字段里不重复的comment
Dim ColumnComment()
Dim ColumnCommentNumber()
ReDim Preserve ColumnComment(i)
ReDim Preserve ColumnCommentNumber(i)

Dim tbl <wbr /> <wbr /> '当前表
Dim col <wbr /> <wbr /> '当前字段
dim curComment '当前字段comment

'处理模型中的表
for each tbl in folder.tables
<wbr /> <wbr /> <wbr /> if not tbl.isShortcut then
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> if len(trim(tbl.comment))&#60;&#62;0 then
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> '可以在这里显示table的comment
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> 'tbl.code = tbl.code+"("+trim(tbl.comment)+")"
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> end if <wbr />

<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> '处理表中的列
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> for each col in tbl.columns
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> k = 0
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> curComment = trim(col.comment)
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> if len(curComment)&#60;&#62;0 then
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> '遍历相异的comment数组
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> for j = 0 to i
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> if ColumnComment(j) = curComment then
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> '如果找到相同的comment,则相关计数器加1
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> ColumnCommentNumber(j) = ColumnCommentNumber(j) + 1
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> k = j
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> end if
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> Next
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> '如果没有相同的comment,则k=0,此时ColumnCommentNumber(0)也为0
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> '否则ColumnCommentNumber(k)不为0
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> if ColumnCommentNumber(k) &#60;&#62; 0 then
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> col.code = curComment &#38; cstr(ColumnCommentNumber(k))
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> else
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> col.code = curComment
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> 'ColumnComment(0)、ColumnCommentNumber(0)永远为空
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> '将相异的comment记录添加到数组中
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> i = i + 1
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> ReDim Preserve ColumnComment(i)
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> ReDim Preserve ColumnCommentNumber(i)
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> ColumnComment(i) = curComment
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> ColumnCommentNumber(i) = 0
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> end if
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> else
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> '写入文件中
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> file.WriteLine "comment on column "+ tbl.code+"."+col.code+" is '';" <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> end if
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> next
<wbr /> <wbr /> <wbr /> end if
<wbr /> <wbr /> <wbr /> '由于不同表的code允许相同,因此此时重新初始化。
<wbr /> <wbr /> <wbr /> '因为ColumnComment(0)、ColumnCommentNumber(0)为空，可以保留
<wbr /> <wbr /> <wbr /> ReDim Preserve ColumnComment(0)
<wbr /> <wbr /> <wbr /> ReDim Preserve ColumnCommentNumber(0)
<wbr /> <wbr /> <wbr /> i=0:j=0:k=0

next

Dim view '当前视图
for each view in folder.Views
<wbr /> <wbr /> <wbr /> if not view.isShortcut then
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> '可以在这里显示view的comment
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> 'view.code = view.comment
<wbr /> <wbr /> <wbr /> end if
next

'对子目录进行递归
Dim subpackage 'folder
For Each subpackage In folder.Packages
<wbr /> <wbr /> <wbr /> if not subpackage.IsShortcut then
<wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> ProcessFolder subpackage , file
<wbr /> <wbr /> <wbr /> end if
Next

end sub]]></description>
		<wfw:commentRss>http://www.icartype.com/?feed=rss2&#038;p=218</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lucene+HighLighter高亮显示实例</title>
		<link>http://www.icartype.com/?p=215</link>
		<comments>http://www.icartype.com/?p=215#comments</comments>
		<pubDate>Fri, 08 Jul 2016 07:53:14 +0000</pubDate>
		<dc:creator><![CDATA[lidasheng]]></dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.icartype.com/?p=215</guid>
		<description><![CDATA[功能包括：创建索引、检索索引、高亮显示查询结果。分词使用的庖丁解牛。



使用前先下载相关的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：创建索引文件
<div>
<div>
<div>Java代码 <a title="复制代码" href="http://blog.sina.com.cn/s/blog_49b531af0100qbjg.html#"><img title="Lucene+HighLighter高亮显示实例" src="http://blog.sina.com.cn/images/icon_copy.gif" alt="复制代码" /></a> <wbr /><a title="收藏这段代码"><img title="Lucene+HighLighter高亮显示实例" src="http://blog.sina.com.cn/images/icon_star.png" alt="收藏代码" /></a></div>
</div>
<ol>
	<li><strong><span style="color: #7f0055;">package</span></strong> <wbr />demo; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />java.io.BufferedReader; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />java.io.File; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />java.io.FileInputStream; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />java.io.IOException; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />java.io.InputStreamReader; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />java.util.Date; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />net.paoding.analysis.analyzer.PaodingAnalyzer; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.analysis.Analyzer; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.document.Document; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.document.Field; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.index.IndexWriter; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">class</span></strong> <wbr />CreateIndex <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">void</span></strong> <wbr />createIndex() <wbr /><strong><span style="color: #7f0055;">throws</span></strong> <wbr />Exception <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />File <wbr />surceFileDir <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />File(<span style="color: #0000ff;">"D:\\save\\source"</span>); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />File <wbr />indexFileDir <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />File(<span style="color: #0000ff;">"D:\\save"</span>); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">//Analyzer <wbr />luceneAnalyzer <wbr />= <wbr />new <wbr />StandardAnalyzer(); <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />Analyzer <wbr />luceneAnalyzer <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />PaodingAnalyzer();<span style="color: #008200;">//使用庖丁解牛分词法 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />IndexWriter <wbr />indexWriter <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />IndexWriter(indexFileDir, <wbr />luceneAnalyzer, <wbr /><strong><span style="color: #7f0055;">true</span></strong>);<span style="color: #008200;">///参数isEmpty是false表示增量索引 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />File[] <wbr />sourceFextFiles <wbr />= <wbr />surceFileDir.listFiles(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">long</span></strong> <wbr />startTime <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />Date().getTime(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />增加document到索引去 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">for</span></strong> <wbr />(<strong><span style="color: #7f0055;">int</span></strong> <wbr />i <wbr />= <wbr /><span style="color: #c00000;">0</span>; <wbr />i <wbr />&#60; <wbr />sourceFextFiles.length; <wbr />i++) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">if</span></strong> <wbr />(sourceFextFiles[i].isFile() <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />&#38;&#38; <wbr />sourceFextFiles[i].getName().endsWith(<span style="color: #0000ff;">".txt"</span>)) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />System.out.println(<span style="color: #0000ff;">"File <wbr />"</span> <wbr />+ <wbr />sourceFextFiles[i].getCanonicalPath() <wbr />+ <wbr /><span style="color: #0000ff;">"正在被索引...."</span>); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />String <wbr />temp <wbr />= <wbr />FileReaderAll(sourceFextFiles[i].getCanonicalPath(), <wbr /><span style="color: #0000ff;">"GBK"</span>); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />System.out.println(temp); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />Document <wbr />document <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />Document(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />Field <wbr />FieldPath <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />Field(<span style="color: #0000ff;">"path"</span>, <wbr />sourceFextFiles[i].getPath(), <wbr />Field.Store.YES, <wbr />Field.Index.NO); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />Field <wbr />FieldBody <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />Field(<span style="color: #0000ff;">"body"</span>, <wbr />temp, <wbr />Field.Store.YES, <wbr />Field.Index.TOKENIZED, <wbr />Field.TermVector.WITH_POSITIONS_OFFSETS); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />Field <wbr />FieldTitle <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />Field(<span style="color: #0000ff;">"title"</span>, <wbr />temp, <wbr />Field.Store.YES, <wbr />Field.Index.TOKENIZED, <wbr />Field.TermVector.WITH_POSITIONS_OFFSETS); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />document.add(FieldPath); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />document.add(FieldBody);document.add(FieldTitle); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />indexWriter.addDocument(document); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />optimize()方法是对索引进行优化 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />indexWriter.optimize(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />indexWriter.close(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />测试一下索引的时间 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">long</span></strong> <wbr />endTime <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />Date().getTime(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />System.out.println(<span style="color: #0000ff;">"这花费了"</span> <wbr />+ <wbr />(endTime <wbr />- <wbr />startTime) <wbr />+ <wbr /><span style="color: #0000ff;">" <wbr />毫秒来把文档增加到索引里面去!"</span> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />+ <wbr />indexFileDir.getPath()); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr />String <wbr />FileReaderAll(String <wbr />FileName, <wbr />String <wbr />charset) <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">throws</span></strong> <wbr />IOException <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />BufferedReader <wbr />reader <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />BufferedReader(<strong><span style="color: #7f0055;">new</span></strong> <wbr />InputStreamReader( <wbr /> <wbr /> <wbr /> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />FileInputStream(FileName), <wbr />charset)); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />String <wbr />line <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />String(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />String <wbr />temp <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />String(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">while</span></strong> <wbr />((line <wbr />= <wbr />reader.readLine()) <wbr />!= <wbr /><strong><span style="color: #7f0055;">null</span></strong>) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />temp <wbr />+= <wbr />line; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />reader.close(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">return</span></strong> <wbr />temp; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">void</span></strong> <wbr />main(String[] <wbr />args) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">try</span></strong> <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />CreateIndex().createIndex(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /><strong><span style="color: #7f0055;">catch</span></strong> <wbr />(Exception <wbr />e) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />e.printStackTrace(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li>} <wbr /> <wbr /> <wbr /> <wbr /></li>
</ol>
</div>
QueryHighLighter：检索关键字并高亮显示
<div>
<div>
<div>Java代码 <a title="复制代码" href="http://blog.sina.com.cn/s/blog_49b531af0100qbjg.html#"><img title="Lucene+HighLighter高亮显示实例" src="http://blog.sina.com.cn/images/icon_copy.gif" alt="复制代码" /></a> <wbr /><a title="收藏这段代码"><img title="Lucene+HighLighter高亮显示实例" src="http://blog.sina.com.cn/images/icon_star.png" alt="收藏代码" /></a></div>
</div>
<ol>
	<li><strong><span style="color: #7f0055;">package</span></strong> <wbr />demo; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />java.io.StringReader; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />net.paoding.analysis.analyzer.PaodingAnalyzer; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.analysis.Analyzer; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.analysis.TokenStream; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.document.Document; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.queryParser.QueryParser; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.BooleanClause; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.IndexSearcher; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.Query; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.ScoreDoc; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.TopDocCollector; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.highlight.Highlighter; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.highlight.QueryScorer; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.highlight.SimpleFragmenter; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.highlight.SimpleHTMLFormatter; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />test.TestLuceneHighlighter2; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">class</span></strong> <wbr />QueryHighLighter <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">private</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />FIELD_TITLE <wbr />= <wbr /><span style="color: #0000ff;">"title"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">private</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />FIELD_BODY <wbr />= <wbr /><span style="color: #0000ff;">"body"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">synchronized</span></strong> <wbr />Analyzer <wbr />getAnalyzer() <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">return</span></strong> <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />PaodingAnalyzer();<span style="color: #008200;">// <wbr />此处使用"庖丁解牛"分词法，另外一种是中科院分词法 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr />String <wbr />test(String <wbr />queryString, <wbr /><strong><span style="color: #7f0055;">int</span></strong> <wbr />begin, <wbr /><strong><span style="color: #7f0055;">int</span></strong> <wbr />number) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />StringBuffer <wbr />sb <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />StringBuffer(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />IndexSearcher <wbr />isearcher <wbr />= <wbr /><strong><span style="color: #7f0055;">null</span></strong>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">try</span></strong> <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />isearcher <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />IndexSearcher(<span style="color: #0000ff;">"D:\\save"</span>); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />BooleanClause.Occur[] <wbr />clauses <wbr />= <wbr />{ <wbr />BooleanClause.Occur.SHOULD, <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />BooleanClause.Occur.SHOULD <wbr />}; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />TopDocCollector <wbr />collector <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />TopDocCollector(<span style="color: #c00000;">10</span>); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />QueryParser <wbr />queryParse <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />QueryParser(FIELD_TITLE, <wbr />getAnalyzer()); <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />Query <wbr />query <wbr />= <wbr />queryParse.parse(queryString); <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />isearcher.search(query, <wbr />collector); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />ScoreDoc[] <wbr />hits <wbr />= <wbr />collector.topDocs().scoreDocs; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />用这个进行高亮显示，默认是&#60;b&#62;..&#60;/b&#62; <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />用这个指定&#60;read&#62;..&#60;/read&#62; <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />SimpleHTMLFormatter <wbr />simpleHTMLFormatter <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />SimpleHTMLFormatter(<span style="color: #0000ff;">"&#60;b&#62;&#60;font <wbr />color='red'&#62;"</span>, <wbr /><span style="color: #0000ff;">"&#60;/font&#62;&#60;/b&#62;"</span>); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />构造高亮 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />指定高亮的格式 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />指定查询评分 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />Highlighter <wbr />highlighter <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />Highlighter(simpleHTMLFormatter, <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />QueryScorer(query)); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />这个一般等于你要返回的，高亮的数据长度 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />如果太小，则只有数据的开始部分被解析并高亮，且返回的数据也少 <wbr /> <wbr /> <wbr /></span> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />太大，有时太浪费了。 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />highlighter.setTextFragmenter(<strong><span style="color: #7f0055;">new</span></strong> <wbr />SimpleFragmenter(Integer.MAX_VALUE)); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">for</span></strong> <wbr />(<strong><span style="color: #7f0055;">int</span></strong> <wbr />i <wbr />= <wbr />begin; <wbr />i <wbr />&#60; <wbr />hits.length <wbr />&#38;&#38; <wbr />i <wbr />&#60; <wbr />begin <wbr />+ <wbr />number; <wbr />i++) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />Document <wbr />doc <wbr />= <wbr />isearcher.doc(hits[i].doc); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />String <wbr />value <wbr />= <wbr />doc.get(FIELD_TITLE); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />String <wbr />value2 <wbr />= <wbr />doc.get(FIELD_BODY); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />有三个参数 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />分析器 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />要解析的字段名 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />要解析的数据 <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">//System.out.println(highlighter.getBestFragment(getAnalyzer(), <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />FIELD_TITLE, <wbr />doc.get(FIELD_TITLE))); <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">if</span></strong> <wbr />(value <wbr />!= <wbr /><strong><span style="color: #7f0055;">null</span></strong>) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />TokenStream <wbr />tokenStream <wbr />= <wbr />getAnalyzer().tokenStream(FIELD_TITLE, <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />StringReader(value)); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />String <wbr />str <wbr />= <wbr />highlighter.getBestFragment(tokenStream, <wbr />value); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />sb.append(<span style="color: #0000ff;">"&#60;li&#62;&#60;li&#62;"</span>).append(str).append(<span style="color: #0000ff;">"&#60;br/&#62;"</span>); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />System.out.println(str); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /><strong><span style="color: #7f0055;">catch</span></strong> <wbr />(Exception <wbr />e) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />e.printStackTrace(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /><strong><span style="color: #7f0055;">finally</span></strong> <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">if</span></strong> <wbr />(isearcher <wbr />!= <wbr /><strong><span style="color: #7f0055;">null</span></strong>) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">try</span></strong> <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />isearcher.close(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /><strong><span style="color: #7f0055;">catch</span></strong> <wbr />(Exception <wbr />e) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />e.printStackTrace(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">return</span></strong> <wbr />sb.toString(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">void</span></strong> <wbr />main(String[] <wbr />args){ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />TestLuceneHighlighter2 <wbr />t <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />TestLuceneHighlighter2(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />String <wbr />queryString <wbr />= <wbr /><span style="color: #0000ff;">"中华人民共和国"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">int</span></strong> <wbr />begin <wbr />= <wbr /><span style="color: #c00000;">0</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">int</span></strong> <wbr />number <wbr />= <wbr /><span style="color: #c00000;">10</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />t.test(queryString, <wbr />begin, <wbr />number); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li>} <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">package</span></strong> <wbr />demo;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />java.io.StringReader;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />net.paoding.analysis.analyzer.PaodingAnalyzer;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.analysis.Analyzer;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.analysis.TokenStream;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.document.Document;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.queryParser.QueryParser;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.BooleanClause;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.IndexSearcher;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.Query;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.ScoreDoc;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.TopDocCollector;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.highlight.Highlighter;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.highlight.QueryScorer;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.highlight.SimpleFragmenter;  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />org.apache.lucene.search.highlight.SimpleHTMLFormatter;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />test.TestLuceneHighlighter2;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">class</span></strong> <wbr />QueryHighLighter <wbr />{  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">private</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />FIELD_TITLE <wbr />= <wbr /><span style="color: #0000ff;">"title"</span>;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">private</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />FIELD_BODY <wbr />= <wbr /><span style="color: #0000ff;">"body"</span>;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">synchronized</span></strong> <wbr />Analyzer <wbr />getAnalyzer() <wbr />{  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">return</span></strong> <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />PaodingAnalyzer();<span style="color: #008200;">// <wbr />此处使用"庖丁解牛"分词法，另外一种是中科院分词法</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />}  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr />String <wbr />test(String <wbr />queryString, <wbr /><strong><span style="color: #7f0055;">int</span></strong> <wbr />begin, <wbr /><strong><span style="color: #7f0055;">int</span></strong> <wbr />number) <wbr />{  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />StringBuffer <wbr />sb <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />StringBuffer();  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />IndexSearcher <wbr />isearcher <wbr />= <wbr /><strong><span style="color: #7f0055;">null</span></strong>;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">try</span></strong> <wbr />{  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />isearcher <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />IndexSearcher(<span style="color: #0000ff;">"D:\\save"</span>);  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />BooleanClause.Occur[] <wbr />clauses <wbr />= <wbr />{ <wbr />BooleanClause.Occur.SHOULD,  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />BooleanClause.Occur.SHOULD <wbr />};  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />TopDocCollector <wbr />collector <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />TopDocCollector(<span style="color: #c00000;">10</span>);  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />QueryParser <wbr />queryParse <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />QueryParser(FIELD_TITLE, <wbr />getAnalyzer()); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />Query <wbr />query <wbr />= <wbr />queryParse.parse(queryString); <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />isearcher.search(query, <wbr />collector);  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />ScoreDoc[] <wbr />hits <wbr />= <wbr />collector.topDocs().scoreDocs;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />用这个进行高亮显示，默认是&#60;b&#62;..&#60;/b&#62;</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />用这个指定&#60;read&#62;..&#60;/read&#62;</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />SimpleHTMLFormatter <wbr />simpleHTMLFormatter <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />SimpleHTMLFormatter(<span style="color: #0000ff;">"&#60;b&#62;&#60;font <wbr />color='red'&#62;"</span>, <wbr /><span style="color: #0000ff;">"&#60;/font&#62;&#60;/b&#62;"</span>);  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />构造高亮</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />指定高亮的格式</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />指定查询评分</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />Highlighter <wbr />highlighter <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />Highlighter(simpleHTMLFormatter, <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />QueryScorer(query));  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />这个一般等于你要返回的，高亮的数据长度</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />如果太小，则只有数据的开始部分被解析并高亮，且返回的数据也少</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />太大，有时太浪费了。</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />highlighter.setTextFragmenter(<strong><span style="color: #7f0055;">new</span></strong> <wbr />SimpleFragmenter(Integer.MAX_VALUE));  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">for</span></strong> <wbr />(<strong><span style="color: #7f0055;">int</span></strong> <wbr />i <wbr />= <wbr />begin; <wbr />i <wbr />&#60; <wbr />hits.length <wbr />&#38;&#38; <wbr />i <wbr />&#60; <wbr />begin <wbr />+ <wbr />number; <wbr />i++) <wbr />{  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />Document <wbr />doc <wbr />= <wbr />isearcher.doc(hits[i].doc);  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />String <wbr />value <wbr />= <wbr />doc.get(FIELD_TITLE);  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />String <wbr />value2 <wbr />= <wbr />doc.get(FIELD_BODY);  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />有三个参数</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />分析器</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />要解析的字段名</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />要解析的数据</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">//System.out.println(highlighter.getBestFragment(getAnalyzer(),</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />FIELD_TITLE, <wbr />doc.get(FIELD_TITLE)));</span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">if</span></strong> <wbr />(value <wbr />!= <wbr /><strong><span style="color: #7f0055;">null</span></strong>) <wbr />{  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />TokenStream <wbr />tokenStream <wbr />= <wbr />getAnalyzer().tokenStream(FIELD_TITLE, <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />StringReader(value));  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />String <wbr />str <wbr />= <wbr />highlighter.getBestFragment(tokenStream, <wbr />value);  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />sb.append(<span style="color: #0000ff;">"&#60;li&#62;&#60;li&#62;"</span>).append(str).append(<span style="color: #0000ff;">"&#60;br/&#62;"</span>);  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />System.out.println(str);  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />}  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /><strong><span style="color: #7f0055;">catch</span></strong> <wbr />(Exception <wbr />e) <wbr />{  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />e.printStackTrace();  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /><strong><span style="color: #7f0055;">finally</span></strong> <wbr />{  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">if</span></strong> <wbr />(isearcher <wbr />!= <wbr /><strong><span style="color: #7f0055;">null</span></strong>) <wbr />{  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">try</span></strong> <wbr />{  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />isearcher.close();  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /><strong><span style="color: #7f0055;">catch</span></strong> <wbr />(Exception <wbr />e) <wbr />{  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />e.printStackTrace();  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />}  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />}  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />}  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">return</span></strong> <wbr />sb.toString();  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />}  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">void</span></strong> <wbr />main(String[] <wbr />args){  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />TestLuceneHighlighter2 <wbr />t <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />TestLuceneHighlighter2();  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />String <wbr />queryString <wbr />= <wbr /><span style="color: #0000ff;">"中华人民共和国"</span>;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">int</span></strong> <wbr />begin <wbr />= <wbr /><span style="color: #c00000;">0</span>;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">int</span></strong> <wbr />number <wbr />= <wbr /><span style="color: #c00000;">10</span>;  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />t.test(queryString, <wbr />begin, <wbr />number);  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />}  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /></li>
	<li>}  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /></li>
</ol>
</div>
附加上传net\paoding\analysis\Constants.java便于理解参数设置：
<div>
<div>
<div>Java代码 <a title="复制代码" href="http://blog.sina.com.cn/s/blog_49b531af0100qbjg.html#"><img title="Lucene+HighLighter高亮显示实例" src="http://blog.sina.com.cn/images/icon_copy.gif" alt="复制代码" /></a> <wbr /><a title="收藏这段代码"><img title="Lucene+HighLighter高亮显示实例" src="http://blog.sina.com.cn/images/icon_star.png" alt="收藏代码" /></a></div>
</div>
<ol>
	<li><strong><span style="color: #7f0055;">package</span></strong> <wbr />net.paoding.analysis; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />java.util.HashMap; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />java.util.Map; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">import</span></strong> <wbr />java.util.Properties; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">class</span></strong> <wbr />Constants <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_HOME_CONFIG_FIRST <wbr />= <wbr /><span style="color: #0000ff;">"paoding.dic.home.config-first"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_HOME_CONFIG_FIRST_DEFAULT <wbr />= <wbr /><span style="color: #0000ff;">"system-env"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />ENV_PAODING_DIC_HOME <wbr />= <wbr /><span style="color: #0000ff;">"PAODING_DIC_HOME"</span>; <wbr /> <wbr /> <wbr /> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_HOME <wbr />= <wbr /><span style="color: #0000ff;">"paoding.dic.home"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_HOME_DEFAULT <wbr />= <wbr /><strong><span style="color: #7f0055;">null</span></strong>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_CHARSET <wbr />= <wbr /><span style="color: #0000ff;">"paoding.dic.charset"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_CHARSET_DEFAULT <wbr />= <wbr /><span style="color: #0000ff;">"UTF-8"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />dictionaries <wbr />which <wbr />are <wbr />skip <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_SKIP_PREFIX <wbr />= <wbr /><span style="color: #0000ff;">"paoding.dic.skip.prefix"</span>; <wbr /> <wbr /> <wbr /> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_SKIP_PREFIX_DEFAULT <wbr />= <wbr /><span style="color: #0000ff;">"x-"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />chinese/cjk <wbr />charactors <wbr />that <wbr />will <wbr />not <wbr />token <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_NOISE_CHARACTOR <wbr />= <wbr /><span style="color: #0000ff;">"paoding.dic.noise-charactor"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_NOISE_CHARACTOR_DEFAULT <wbr />= <wbr /><span style="color: #0000ff;">"x-noise-charactor"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />chinese/cjk <wbr />words <wbr />that <wbr />will <wbr />not <wbr />token <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_NOISE_WORD <wbr />= <wbr /><span style="color: #0000ff;">"paoding.dic.noise-word"</span>; <wbr /> <wbr /> <wbr /> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_NOISE_WORD_DEFAULT <wbr />= <wbr /><span style="color: #0000ff;">"x-noise-word"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />unit <wbr />words, <wbr />like <wbr />"ge", <wbr />"zhi", <wbr />... <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_UNIT <wbr />= <wbr /><span style="color: #0000ff;">"paoding.dic.unit"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_UNIT_DEFAULT <wbr />= <wbr /><span style="color: #0000ff;">"x-unit"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />like <wbr />"Wang", <wbr />"Zhang", <wbr />... <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_CONFUCIAN_FAMILY_NAME <wbr />= <wbr /><span style="color: #0000ff;">"paoding.dic.confucian-family-name"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_CONFUCIAN_FAMILY_NAME_DEFAULT <wbr />= <wbr /><span style="color: #0000ff;">"x-confucian-family-name"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />like <wbr /> <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_FOR_COMBINATORICS <wbr />= <wbr /><span style="color: #0000ff;">"paoding.dic.for-combinatorics"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_FOR_COMBINATORICS_DEFAULT <wbr />= <wbr /><span style="color: #0000ff;">"x-for-combinatorics"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />like <wbr /> <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_DETECTOR_INTERVAL <wbr />= <wbr /><span style="color: #0000ff;">"paoding.dic.detector.interval"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />DIC_DETECTOR_INTERVAL_DEFAULT <wbr />= <wbr /><span style="color: #0000ff;">"60"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />like <wbr />"default", <wbr />"max", <wbr />... <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />ANALYZER_MODE <wbr />= <wbr /><span style="color: #0000ff;">"paoding.analyzer.mode"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />ANALYZER_MOE_DEFAULT <wbr />= <wbr /><span style="color: #0000ff;">"most-words"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr /> <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />ANALYZER_DICTIONARIES_COMPILER <wbr />= <wbr /><span style="color: #0000ff;">"paoding.analyzer.dictionaries.compiler"</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />ANALYZER_DICTIONARIES_COMPILER_DEFAULT <wbr />= <wbr /><strong><span style="color: #7f0055;">null</span></strong>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr />------------------------------------------------------------- <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">private</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />Mapmap <wbr />= <wbr /><strong><span style="color: #7f0055;">new</span></strong> <wbr />HashMap(); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(DIC_HOME_CONFIG_FIRST, <wbr />DIC_HOME_CONFIG_FIRST_DEFAULT); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(DIC_HOME, <wbr />DIC_HOME_DEFAULT); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(DIC_CHARSET, <wbr />DIC_CHARSET_DEFAULT); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(DIC_SKIP_PREFIX, <wbr />DIC_SKIP_PREFIX_DEFAULT); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(DIC_NOISE_CHARACTOR, <wbr />DIC_NOISE_CHARACTOR_DEFAULT); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(DIC_NOISE_WORD, <wbr />DIC_NOISE_WORD_DEFAULT); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(DIC_UNIT, <wbr />DIC_UNIT_DEFAULT); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(DIC_CONFUCIAN_FAMILY_NAME, <wbr />DIC_CONFUCIAN_FAMILY_NAME_DEFAULT); <wbr /> <wbr /> <wbr /> <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(DIC_FOR_COMBINATORICS, <wbr />DIC_FOR_COMBINATORICS_DEFAULT); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(DIC_DETECTOR_INTERVAL, <wbr />DIC_DETECTOR_INTERVAL_DEFAULT); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(ANALYZER_MODE, <wbr />ANALYZER_MOE_DEFAULT); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr />map.put(ANALYZER_DICTIONARIES_COMPILER, <wbr />ANALYZER_DICTIONARIES_COMPILER_DEFAULT); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><span style="color: #008200;">// <wbr /> <wbr /> <wbr /></span>  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr /><strong><span style="color: #7f0055;">final</span></strong> <wbr />String <wbr />KNIFE_CLASS <wbr />= <wbr /><span style="color: #0000ff;">"paoding.knife.class."</span>; <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">public</span></strong> <wbr /><strong><span style="color: #7f0055;">static</span></strong> <wbr />String <wbr />getProperty(Properties <wbr />p, <wbr />String <wbr />name) <wbr />{ <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /> <wbr /><strong><span style="color: #7f0055;">return</span></strong> <wbr />p.getProperty(name, <wbr />(String) <wbr />map.get(name)); <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li> <wbr /> <wbr /> <wbr /> <wbr />} <wbr /> <wbr /> <wbr />  <wbr /> <wbr /></li>
	<li>} <wbr /> <wbr /> <wbr /></li>
</ol>
</div>]]></description>
		<wfw:commentRss>http://www.icartype.com/?feed=rss2&#038;p=215</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>hbase上应用lucene创建索引及检索</title>
		<link>http://www.icartype.com/?p=213</link>
		<comments>http://www.icartype.com/?p=213#comments</comments>
		<pubDate>Fri, 08 Jul 2016 07:32:31 +0000</pubDate>
		<dc:creator><![CDATA[lidasheng]]></dc:creator>
				<category><![CDATA[Hbase]]></category>

		<guid isPermaLink="false">http://www.icartype.com/?p=213</guid>
		<description><![CDATA[<div id="blog_content" class="blog_content">  hbasene(<a href="https://github.com/akkumar/hbasene" target="_blank">https://github.com/akkumar/hbasene</a>)是开源项目，在hbase存储上封装使用Lucene来创建索引，代码API非常简单，熟悉lucene的朋友可以很方便地创建。

以下为测试代码，完成读取一张hbase上记录url和用户id的表，对其创建索引并进行简单的基于url的索引的代码。当取到search的结果后，就可以拿到想要的数据了。由于分词后将原始内容进行了反向索引，所以匹配就转化为了查询，速度相当快。

其中getDocumentFromHTable为读取一张hbase上己有的表，将url字段提取出来创建content索引。

创建索引的实质是用了HBaseIndexWriter和HBaseIndexReader两个分别继承自IndexWriter和IndexReader的类来做索引的读取和写入。同时使用了HBaseIndexStore来做存储。

而创建索引使用的分词等仍然是使用标准的lucene API。

注意hbasene使用的是hbase-0.20.5，需要修改少量源代码才能运行在0.90.x以上的版本中。

这里对创建索引表使用到的结构做下简单的说明，因为是lucene入门级水平，所以各位请尽管拍砖讨论。

索引表由以下几个CF构成:
<ul>
	<li>fm.sequence: 记录sequenceId，在执行createLuceneIndexTable时需要写死该CF的row为sequenceId,qulifier为qual.sequence，值为-1。可以不用理会</li>
	<li>fm.doc2int: DocumentId,每个document都会有一个这样的id,如果Field.Store设置为YES，则能在索引表中查询到该id并得到完整的内容。</li>
	<li>fm.termVector: 向量偏移，用于模糊查找，记录偏移量等信息</li>
	<li>fm.termFrequency:分词后的关键词在每个document中出现的频率，qulifier为documentId，value为出现次数</li>
	<li>fm.fields:记录了content内容，row为documentId，value为document的全文内容，它和fm.docint是相反的，后者是反向索引。</li>
	<li>fm.payloads:扩展CF，目前还没有用到</li>
</ul>
<div id="" class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <embed src="http://koven2049.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash" width="14" height="15"></embed> <a title="收藏这段代码"><img class="star" src="http://koven2049.iteye.com/images/icon_star.png" alt="收藏代码" /></a></div>
</div>
<ol class="dp-j" start="1">
	<li><span class="keyword">import</span> java.io.IOException;</li>
	<li></li>
	<li><span class="keyword">import</span> org.apache.hadoop.conf.Configuration;</li>
	<li><span class="keyword">import</span> org.apache.hadoop.hbase.HBaseConfiguration;</li>
	<li><span class="keyword">import</span> org.apache.hadoop.hbase.client.HTable;</li>
	<li><span class="keyword">import</span> org.apache.hadoop.hbase.client.HTablePool;</li>
	<li><span class="keyword">import</span> org.apache.hadoop.hbase.client.Result;</li>
	<li><span class="keyword">import</span> org.apache.hadoop.hbase.client.ResultScanner;</li>
	<li><span class="keyword">import</span> org.apache.hadoop.hbase.client.Scan;</li>
	<li><span class="keyword">import</span> org.apache.lucene.analysis.standard.StandardAnalyzer;</li>
	<li><span class="keyword">import</span> org.apache.lucene.document.Document;</li>
	<li><span class="keyword">import</span> org.apache.lucene.document.Field;</li>
	<li><span class="keyword">import</span> org.apache.lucene.document.Fieldable;</li>
	<li><span class="keyword">import</span> org.apache.lucene.index.IndexReader;</li>
	<li><span class="keyword">import</span> org.apache.lucene.index.Term;</li>
	<li><span class="keyword">import</span> org.apache.lucene.search.IndexSearcher;</li>
	<li><span class="keyword">import</span> org.apache.lucene.search.ScoreDoc;</li>
	<li><span class="keyword">import</span> org.apache.lucene.search.TermQuery;</li>
	<li><span class="keyword">import</span> org.apache.lucene.search.TopDocs;</li>
	<li><span class="keyword">import</span> org.apache.lucene.util.Version;</li>
	<li><span class="keyword">import</span> org.hbasene.index.HBaseIndexReader;</li>
	<li><span class="keyword">import</span> org.hbasene.index.HBaseIndexStore;</li>
	<li><span class="keyword">import</span> org.hbasene.index.HBaseIndexWriter;</li>
	<li></li>
	<li><span class="keyword">public</span> <span class="keyword">class</span> test{</li>
	<li>      <span class="keyword">static</span> <span class="keyword">final</span> String indexName = <span class="string">"myindex"</span>;</li>
	<li>      <span class="keyword">static</span> <span class="keyword">final</span> String dataName = <span class="string">"t1"</span>;</li>
	<li>      <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String[] args) <span class="keyword">throws</span> IOException {</li>
	<li></li>
	<li>        <span class="keyword">try</span>{</li>
	<li>        Configuration conf = HBaseConfiguration.create(); <span class="comment">//hbase-site.xml in the classpath</span></li>
	<li>        conf.set(<span class="string">"hbase.rootdir"</span>, <span class="string">"hdfs://192.168.0.1:9000/hbase"</span>);</li>
	<li>        conf.set(<span class="string">"hbase.zookeeper.quorum"</span>, <span class="string">"192.168.0.1,192.168.0.2,192.168.0.3"</span>);</li>
	<li>        HTablePool tablePool = <span class="keyword">new</span> HTablePool(conf, <span class="number">10</span>);</li>
	<li>        HBaseIndexStore.createLuceneIndexTable(indexName, conf, <span class="keyword">true</span>);</li>
	<li>        <span class="comment">//Write</span></li>
	<li>        HBaseIndexStore hbaseIndex = <span class="keyword">new</span> HBaseIndexStore(tablePool, conf, indexName);</li>
	<li>        HBaseIndexWriter writer = <span class="keyword">new</span> HBaseIndexWriter(hbaseIndex, <span class="string">"content"</span>); <span class="comment">//Name of the primary key field.</span></li>
	<li></li>
	<li>        getDocument(writer);</li>
	<li>        writer.close();</li>
	<li></li>
	<li>        <span class="comment">//Read/Search</span></li>
	<li>        IndexReader reader = <span class="keyword">new</span> HBaseIndexReader(tablePool, indexName, <span class="string">"f"</span>);</li>
	<li>        IndexSearcher searcher = <span class="keyword">new</span> IndexSearcher(reader);</li>
	<li>        Term term = <span class="keyword">new</span> Term(<span class="string">"content"</span>, <span class="string">"item.taobao.com"</span>);</li>
	<li>        TermQuery termQuery = <span class="keyword">new</span> TermQuery(term);</li>
	<li>        TopDocs docs = searcher.search(termQuery, <span class="number">3</span>);</li>
	<li>        searcher.close();</li>
	<li>        }<span class="keyword">catch</span>(IOException e){</li>
	<li>            e.printStackTrace();</li>
	<li>            <span class="keyword">throw</span> e;</li>
	<li>        }</li>
	<li>      }</li>
	<li></li>
	<li></li>
	<li>      <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> getDocument(HBaseIndexWriter writer) <span class="keyword">throws</span> IOException{</li>
	<li>        Document doc = <span class="keyword">new</span> Document();</li>
	<li>        doc.add(<span class="keyword">new</span> Field(<span class="string">"content"</span>, <span class="string">"some content some dog"</span>, Field.Store.YES,</li>
	<li>            Field.Index.ANALYZED));</li>
	<li>        writer.addDocument(doc, <span class="keyword">new</span> StandardAnalyzer(Version.LUCENE_30));</li>
	<li>        doc = <span class="keyword">new</span> Document();</li>
	<li>        doc.add(<span class="keyword">new</span> Field(<span class="string">"content"</span>, <span class="string">"some id"</span>, Field.Store.NO, Field.Index.ANALYZED));</li>
	<li>        writer.addDocument(doc, <span class="keyword">new</span> StandardAnalyzer(Version.LUCENE_30));</li>
	<li>        doc = <span class="keyword">new</span> Document();</li>
	<li>        doc.add(<span class="keyword">new</span> Field(<span class="string">"content"</span>, <span class="string">"hot dog"</span>, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS));</li>
	<li>        writer.addDocument(doc, <span class="keyword">new</span> StandardAnalyzer(Version.LUCENE_30));</li>
	<li>      }</li>
	<li></li>
	<li>      <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> getDocumentFromHTable(HTablePool tablePool, HBaseIndexWriter writer) <span class="keyword">throws</span> IOException  {</li>
	<li>          Document doc = <span class="keyword">new</span> Document();</li>
	<li>          Scan scan = <span class="keyword">new</span> Scan();</li>
	<li>          HTable htable = (HTable)tablePool.getTable(dataName);</li>
	<li>          ResultScanner results = htable.getScanner(scan);</li>
	<li>          Result row;</li>
	<li>          <span class="keyword">while</span>((row = results.next()) != <span class="keyword">null</span>){</li>
	<li>              doc = <span class="keyword">new</span> Document();</li>
	<li>              String value = <span class="keyword">new</span> String(row.getValue(<span class="string">"test"</span>.getBytes(), <span class="keyword">null</span>));</li>
	<li>              String url = value.split(<span class="string">"\""</span>)[<span class="number">2</span>];</li>
	<li>              doc.add(<span class="keyword">new</span> Field(<span class="string">"content"</span>, url, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_OFFSETS));</li>
	<li>              writer.addDocument(doc, <span class="keyword">new</span> StandardAnalyzer(Version.LUCENE_30));</li>
	<li>          }</li>
	<li>        }</li>
	<li>}</li>
</ol>
</div>
以下为运行后查看表的中情况：
<img class="magplus" title="点击查看原始大小图片" src="http://dl.iteye.com/upload/attachment/522464/3508dacc-2a1a-3c34-836c-a310d979909e.jpg" alt="" width="700" height="307" /></div>
<div class="attachments">
<ul>
	<li><a href="http://koven2049.iteye.com/blog/1129994#">查看图片附件</a></li>
</ul>
</div>]]></description>
		<wfw:commentRss>http://www.icartype.com/?feed=rss2&#038;p=213</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>hadoop单机版配置</title>
		<link>http://www.icartype.com/?p=210</link>
		<comments>http://www.icartype.com/?p=210#comments</comments>
		<pubDate>Thu, 19 May 2016 01:21:23 +0000</pubDate>
		<dc:creator><![CDATA[lidasheng]]></dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.icartype.com/?p=210</guid>
		<description><![CDATA[<div>zookeeper</div>
<div>  zoo.cfg</div>
<div></div>
<div>tickTime=2000</div>
<div>dataDir=/dataDisk/bmx/hadoop/hadooop2data/zkdata</div>
<div>dataLogDir=/dataDisk/bmx/hadoop/hadooop2data/zkdatalog</div>
<div>clientPort=2181</div>
<div>maxClientCnxns=500</div>
<div>autopurge.snapRetainCount=3</div>
<div>autopurge.purgeInterval=1</div>
<div></div>
<div>hadoop</div>
<div> core-site.xml</div>
<div>  &#60;property&#62;</div>
<div>        &#60;name&#62;fs.defaultFS&#60;/name&#62;</div>
<div>        &#60;value&#62;hdfs://hbase01&#60;/value&#62;</div>
<div>    &#60;/property&#62;</div>
<div></div>
<div>    &#60;property&#62;</div>
<div>                &#60;name&#62;hadoop.tmp.dir&#60;/name&#62;</div>
<div>                &#60;value&#62;/dataDisk/bmx/hadoop/hadooop2data/tmp&#60;/value&#62;</div>
<div>    &#60;/property&#62;</div>
<div></div>
<div>    &#60;property&#62;</div>
<div>        &#60;name&#62;hadoop.proxyuser.hduser.hosts&#60;/name&#62;</div>
<div>        &#60;value&#62;*&#60;/value&#62;</div>
<div>    &#60;/property&#62;</div>
<div></div>
<div>    &#60;property&#62;</div>
<div>        &#60;name&#62;hadoop.proxyuser.hduser.groups&#60;/name&#62;</div>
<div>        &#60;value&#62;*&#60;/value&#62;</div>
<div>    &#60;/property&#62;</div>
<div></div>
<div> hdfs-site.xml</div>
<div></div>
<div> &#60;property&#62;</div>
<div>        &#60;name&#62;dfs.name.dir&#60;/name&#62;</div>
<div>        &#60;value&#62;/dataDisk/bmx/hadoop/hadooop2data/name&#60;/value&#62;</div>
<div>    &#60;/property&#62;</div>
<div>    &#60;property&#62;</div>
<div>        &#60;name&#62;dfs.data.dir&#60;/name&#62;</div>
<div>        &#60;value&#62;/dataDisk/bmx/hadoop/hadooop2data/data&#60;/value&#62;</div>
<div>    &#60;/property&#62;</div>
<div>    &#60;property&#62;</div>
<div>        &#60;name&#62;dfs.replication&#60;/name&#62;</div>
<div>        &#60;value&#62;1&#60;/value&#62;</div>
<div>    &#60;/property&#62;</div>
<div>    &#60;property&#62;</div>
<div>        &#60;name&#62;dfs.datanode.max.transfer.threads&#60;/name&#62;</div>
<div>        &#60;value&#62;4096&#60;/value&#62;</div>
<div>    &#60;/property&#62;</div>
<div>    &#60;property&#62;</div>
<div>        &#60;name&#62;dfs.nameservices&#60;/name&#62;</div>
<div>        &#60;value&#62;hbase01&#60;/value&#62;</div>
<div>    &#60;/property&#62;</div>
<div></div>
<div>yarn-site.xml</div>
<div>&#60;property&#62;</div>
<div>                &#60;name&#62;yarn.resourcemanager.hostname&#60;/name&#62;</div>
<div>                &#60;value&#62;hbase01&#60;/value&#62;</div>
<div>        &#60;/property&#62;</div>
<div>        &#60;property&#62;</div>
<div>                &#60;name&#62;yarn.nodemanager.aux-services&#60;/name&#62;</div>
<div>                &#60;value&#62;mapreduce_shuffle&#60;/value&#62;</div>
<div>        &#60;/property&#62;</div>
<div></div>
<div>hbase</div>
<div>hbase-site.xml</div>
<div> &#60;property&#62;</div>
<div>                &#60;name&#62;hbase.rootdir&#60;/name&#62;</div>
<div>                &#60;value&#62;hdfs://hbase01/hbase&#60;/value&#62;</div>
<div>        &#60;/property&#62;</div>
<div></div>
<div>        &#60;property&#62;</div>
<div>                &#60;name&#62;hbase.cluster.distributed&#60;/name&#62;</div>
<div>                &#60;value&#62;true&#60;/value&#62;</div>
<div>        &#60;/property&#62;</div>
<div></div>
<div>        &#60;property&#62;</div>
<div>                &#60;name&#62;hbase.master&#60;/name&#62;</div>
<div>                &#60;value&#62;6000&#60;/value&#62;</div>
<div>        &#60;/property&#62;</div>
<div></div>
<div>    &#60;property&#62;</div>
<div>        &#60;name&#62;hbase.zookeeper.quorum&#60;/name&#62;</div>
<div>        &#60;value&#62;hbase01:2181&#60;/value&#62;</div>
<div>    &#60;/property&#62;</div>
<div></div>
<div>        &#60;property&#62;</div>
<div>                &#60;name&#62;hbase.master.maxclockskew&#60;/name&#62;</div>
<div>                &#60;value&#62;150000&#60;/value&#62;</div>
<div>        &#60;/property&#62;</div>
<div></div>
<div></div>
<div>more /etc/hosts</div>
<div>127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4</div>
<div>::1         localhost localhost.localdomain localhost6 localhost6.localdomain6</div>
<div>172.30.250.111 hbase01</div>
<div></div>
<div> more /etc/sysconfig/network</div>
<div>NETWORKING=yes</div>
<div>HOSTNAME=hbase01</div>
<div>NOZEROCONF=yes</div>
<div></div>
<div></div>
<div></div>
&#160;]]></description>
		<wfw:commentRss>http://www.icartype.com/?feed=rss2&#038;p=210</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>利用python访问Hbase（Thrift模块安装与测试）</title>
		<link>http://www.icartype.com/?p=207</link>
		<comments>http://www.icartype.com/?p=207#comments</comments>
		<pubDate>Wed, 18 May 2016 03:25:40 +0000</pubDate>
		<dc:creator><![CDATA[lidasheng]]></dc:creator>
				<category><![CDATA[Hbase]]></category>

		<guid isPermaLink="false">http://www.icartype.com/?p=207</guid>
		<description><![CDATA[<strong>hadoop环境介绍：</strong>

master服务：node1

slave服务器：node2，node3，node4

mysql服务器：node29

Thrift安装在node1服务器上！

<strong>相关软件版本：</strong>

hadoop版本：hadoop-0.20.2

sqoop版本：sqoop-1.2.0-CDH3B4

java版本：jdk1.7.0_67

mysql版本：5.1.65

Thrift版本：thrift-0.9.0

thrift安装链接：<a href="http://thrift.apache.org/download/" target="_blank">http://thrift.apache.org/download/</a>

python版本：2.7.3

ps：python2.5版本使用thrift有问题

<strong>一：测试前的准备工作</strong>

1）首先把mysql数据库中数据加载到hbase中：

mysql数据如下：

<a href="http://s3.51cto.com/wyfs02/M02/4D/0F/wKiom1RKCu7Acn6aAAEPRQIQRa8209.jpg" target="_blank"><img style="padding: 0px; margin: 0px; vertical-align: top; border: none;" title="mysql情况.jpg" src="http://s3.51cto.com/wyfs02/M02/4D/0F/wKiom1RKCu7Acn6aAAEPRQIQRa8209.jpg" alt="wKiom1RKCu7Acn6aAAEPRQIQRa8209.jpg" width="650" /></a>

将mysql的数据导入hbase的命令格式为：

sqoop import --connect jdbc:mysql://mysqlserver_IP/databaseName --username --password password --table datatable --hbase-create-table --hbase-table hbase_tablename --column-family col_fam_name --hbase-row-key key_col_name

说明：databaseName 和datatable 是mysql的数据库和表名，hbase_tablename是要导成hbase的表名，key_col_name可以指定datatable中哪一列作 为hbase新表的rowkey，col_fam_name是除rowkey之外的所有列的列族名

2）在node1上加载mysql数据（node29）到hbase中：

sqoop import --connect jdbc:mysql://172.16.41.29/sqoop --username sqoop --password routon --table students --hbase-create-table --hbase-table students --column-family stuinfo --hbase-row-key id

在hbase中验证是否加载成功：

<a href="http://s3.51cto.com/wyfs02/M01/4D/10/wKioL1RKDCHRujBiAAJMEeBRwoU194.jpg" target="_blank"><img style="padding: 0px; margin: 0px; vertical-align: top; border: none;" title="hbase情况.jpg" src="http://s3.51cto.com/wyfs02/M01/4D/10/wKioL1RKDCHRujBiAAJMEeBRwoU194.jpg" alt="wKioL1RKDCHRujBiAAJMEeBRwoU194.jpg" width="650" /></a>

<strong>二 Thrift软件安装</strong>

python版本：2.7.3

步骤为：

1） 安装python2.7.3

说明：python2.7.3与thrift结合没问题，python2.5版本好像不行！

生成的Hbase.py文件中的语法rhel5 自带的python2.4 不支持

tar fvxj Python-2.7.3.tar.bz2

./configure --prefix=/usr/local/python2.7

make &#38;&#38; make install

python2.7.3路径为：

/usr/local/python2.7/bin/python

<strong>修改默认的python版本为2.7</strong>

把python2.7设置为环境变量，系统默认python版本为2.4

rm -rf /usr/bin/python

ln -s /usr/local/python2.7/bin/python /usr/bin/python

[root@node1 thrift-0.9.0]# python -V

Python 2.7.3

&#160;

2)安装thrift

tar fvxz thrift-0.9.0.tar.gz

cd thrift-0.9.0

./configure

make &#38;&#38; make install

thrift 0.9.0

Building C++ Library ......... : no

Building C (GLib) Library .... : yes

Building Java Library ........ : no

Building C# Library .......... : no

Building Python Library ...... : yes

Building Ruby Library ........ : no

Building Haskell Library ..... : no

Building Perl Library ........ : no

Building PHP Library ......... : no

Building Erlang Library ...... : no

Building Go Library .......... : no

Building D Library ........... : no

Python Library:

Using Python .............. : /usr/bin/python

<strong>
</strong>可以看到thrift支持很多语言，根据目前需求，支持python就可以了！

查看Thrift版本：

[root@node1 thrift-0.9.0]# thrift -version

Thrift version 0.9.0

3）让thrift支持hbase

执行以下命令：

thrift --gen py /usr/local/hbase-0.90.5/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

会在当前目前下创建一个目录，目录名称为：

[hadoop@node1 ~]$ ll

total 7056

-rw-rw-r-- 1 hadoop hadoop    3045 Oct 14 13:55 access_log2.txt

-rw-r--r-- 1 hadoop hadoop 7118627 Feb  1  2012 access_log.txt

-rw-rw-r-- 1 hadoop hadoop    3500 Oct 22 10:17 derby.log

drwxrwxr-x 3 hadoop hadoop    4096 Oct 24 15:28 gen-py

-rw-rw-r-- 1 hadoop hadoop    3551 Oct 13 11:21 pig_1413170429087.log

gen-py目录结构如下：

[hadoop@node1 ~]$ tree gen-py/

gen-py/

&#124;-- __init__.py

`-- hbase

&#124;-- Hbase-remote

&#124;-- Hbase.py

&#124;-- __init__.py

&#124;-- constants.py

`-- ttypes.py

1 directory, 6 files

4）把gen-py目录复制到python相关目录中：

cp -r gen-py/hbase/ /usr/local/python2.7/lib/python2.7/site-packages/.

5）让python可以import thrift模块：

[root@node1 ~]# ln -s /usr/lib/python2.7/site-packages/thrift* /usr/local/python2.7/lib/python2.7/site-packages/.

[root@node1 ~]# ls -l /usr/local/python2.7/lib/python2.7/site-packages/

total 12

drwxr-xr-x 2 root root 4096 Oct 24 15:32 hbase

-rw-r--r-- 1 root root  119 Oct 24 11:30 README

lrwxrwxrwx 1 root root   39 Oct 24 15:50 thrift -&#62; /usr/lib/python2.7/site-packages/thrift

lrwxrwxrwx 1 root root   60 Oct 24 15:50 thrift-0.9.0-py2.7.egg-info -&#62; /usr/lib/python2.7/site-packages/thrift-0.9.0-py2.7.egg-info

6）启动thrift服务：

hbase thrift -p 9090 start

7）在node1上编写python脚本，查看hbase中有哪些表：
<div>
<div id="highlighter_588490" class="syntaxhighlighter  python">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div></td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python comments">#! /usr/bin/env python</code></div>
<div class="line number2 index1 alt1"><code class="python comments">#coding=utf-8</code></div>
<div class="line number3 index2 alt2"></div>
<div class="line number4 index3 alt1"><code class="python keyword">import</code> <code class="python plain">sys</code></div>
<div class="line number5 index4 alt2"><code class="python comments">#Hbase.thrift生成的py文件放在这里</code></div>
<div class="line number6 index5 alt1"><code class="python plain">sys.path.append(</code><code class="python string">'/usr/local/lib/python2.7/site-packages/hbase'</code><code class="python plain">)</code></div>
<div class="line number7 index6 alt2"><code class="python keyword">from</code> <code class="python plain">thrift </code><code class="python keyword">import</code> <code class="python plain">Thrift</code></div>
<div class="line number8 index7 alt1"><code class="python keyword">from</code> <code class="python plain">thrift.transport </code><code class="python keyword">import</code> <code class="python plain">TSocket</code></div>
<div class="line number9 index8 alt2"><code class="python keyword">from</code> <code class="python plain">thrift.transport </code><code class="python keyword">import</code> <code class="python plain">TTransport</code></div>
<div class="line number10 index9 alt1"><code class="python keyword">from</code> <code class="python plain">thrift.protocol </code><code class="python keyword">import</code> <code class="python plain">TBinaryProtocol</code></div>
<div class="line number11 index10 alt2"><code class="python keyword">from</code> <code class="python plain">hbase </code><code class="python keyword">import</code> <code class="python plain">Hbase</code></div>
<div class="line number12 index11 alt1"><code class="python comments">#如ColumnDescriptor 等在hbase.ttypes中定义</code></div>
<div class="line number13 index12 alt2"><code class="python keyword">from</code> <code class="python plain">hbase.ttypes </code><code class="python keyword">import</code> <code class="python keyword">*</code></div>
<div class="line number14 index13 alt1"><code class="python comments"># Make socket</code></div>
<div class="line number15 index14 alt2"><code class="python comments">#此处可以修改地址和端口</code></div>
<div class="line number16 index15 alt1"><code class="python plain">transport </code><code class="python keyword">=</code> <code class="python plain">TSocket.TSocket(</code><code class="python string">'172.16.41.26'</code><code class="python plain">, </code><code class="python value">9090</code><code class="python plain">)</code></div>
<div class="line number17 index16 alt2"><code class="python comments"># Buffering is critical. Raw sockets are very slow</code></div>
<div class="line number18 index17 alt1"><code class="python comments"># 还可以用TFramedTransport,也是高效传输方式</code></div>
<div class="line number19 index18 alt2"><code class="python plain">transport </code><code class="python keyword">=</code> <code class="python plain">TTransport.TBufferedTransport(transport)</code></div>
<div class="line number20 index19 alt1"><code class="python comments"># Wrap in a protocol</code></div>
<div class="line number21 index20 alt2"><code class="python comments">#传输协议和传输过程是分离的，可以支持多协议</code></div>
<div class="line number22 index21 alt1"><code class="python plain">protocol </code><code class="python keyword">=</code> <code class="python plain">TBinaryProtocol.TBinaryProtocol(transport)</code></div>
<div class="line number23 index22 alt2"><code class="python comments">#客户端代表一个用户</code></div>
<div class="line number24 index23 alt1"><code class="python plain">client </code><code class="python keyword">=</code> <code class="python plain">Hbase.Client(protocol)</code></div>
<div class="line number25 index24 alt2"><code class="python comments">#打开连接</code></div>
<div class="line number26 index25 alt1"><code class="python plain">transport.</code><code class="python functions">open</code><code class="python plain">()</code></div>
<div class="line number27 index26 alt2"><code class="python comments">#打印表名</code></div>
<div class="line number28 index27 alt1"><code class="python functions">print</code><code class="python plain">(client.getTableNames())</code></div>
</div></td>
</tr>
</tbody>
</table>
</div>
</div>
执行脚本：

<a href="http://s3.51cto.com/wyfs02/M01/4D/10/wKiom1RKEALwhL86AAEY9rF6T_g766.jpg" target="_blank"><img style="padding: 0px; margin: 0px; vertical-align: top; border: none;" title="thrift.jpg" src="http://s3.51cto.com/wyfs02/M01/4D/10/wKiom1RKEALwhL86AAEY9rF6T_g766.jpg" alt="wKiom1RKEALwhL86AAEY9rF6T_g766.jpg" width="650" /></a>

到此，通过thrift插件，python就可以和hbase进行通信！]]></description>
		<wfw:commentRss>http://www.icartype.com/?feed=rss2&#038;p=207</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>hbase命令</title>
		<link>http://www.icartype.com/?p=204</link>
		<comments>http://www.icartype.com/?p=204#comments</comments>
		<pubDate>Wed, 18 May 2016 01:06:43 +0000</pubDate>
		<dc:creator><![CDATA[lidasheng]]></dc:creator>
				<category><![CDATA[Hbase]]></category>

		<guid isPermaLink="false">http://www.icartype.com/?p=204</guid>
		<description><![CDATA[<div>导出文件：</div>
<div>./hbase org.apache.hadoop.hbase.mapreduce.Driver export 'bmx-dev-system1_bmx-cms_Code' file:///dataDisk/hbaseCopy/localCopy/bmx-dev-system1_bmx-cms_Code</div>
<div></div>
<div>./hbase org.apache.hadoop.hbase.mapreduce.Driver export 'bmx-dev-system1_bmx-cms_Blog' file:///dataDisk/hbaseCopy/localCopy/bmx-dev-system1_bmx-cms_Blog</div>
<div></div>
<div>导入文件：</div>
<div>./hbase org.apache.hadoop.hbase.mapreduce.Driver import  ‘bmx-dev-system1_bmx_dev_AppCollection’  <wbr />  file://<wbr />/dataDisk/hbaseCopy/msvm06/bmx-dev-system1_bmx_dev_AppCollection/part-m-00000</div>
<div></div>
<div>//创建快照  <a href="http://www.importnew.com/4966.html">http://www.importnew.com/4966.html</a></div>
<div><a href="http://itindex.net/detail/51698-hbase-">http://itindex.net/detail/51698-hbase-</a>%E6%95%B0%E6%8D%AE-%E5%A4%87%E4%BB%BD</div>
<div></div>
<div>
<div>snapshot  'bmx-dev-system1_bmx-cms_Blog','bmx-dev-system1_bmx-cms_Blog'</div>
<div></div>
<div>
<div><code>hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot </code>'bmx-dev-system1_bmx-cms_Blog' -copy-to hdfs://172.30.250.111:9000/hbase</div>
</div>
<code>./hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot </code>'bmx-dev-system1_bmx-cms_Blog' -copy-to file:///dataDisk/hbaseCopy

</div>
<div></div>
<div></div>
<div></div>
<div>
<h2>HBase命令：快照操作</h2>
通过检查hbase-site.xml中的hbase.snapshot.enabled是否设置为true确认打开了快照许可。获取指定表的快照使用snapshot命令（不产生文件复制）
<div>
<div>
<table border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>
<div>1</div></td>
<td>
<div>
<div><code>hbase&#62; snapshot ‘tableName’, ‘snapshotName’</code></div>
</div></td>
</tr>
</tbody>
</table>
</div>
</div>
列出所有的快照，使用 list_snapshot 命令。会展示出快照名称，源表，以及创建日期和时间
<div>
<div>
<table border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
<div>3</div></td>
<td>
<div>
<div><code>hbase&#62; list_snapshots</code></div>
<div><code>SNAPSHOT               TABLE + CREATION TIME</code></div>
<div><code> </code><code>TestSnapshot          TestTable (Mon Feb 25 21:13:49 +0000 2013)</code></div>
</div></td>
</tr>
</tbody>
</table>
</div>
</div>
删除快照使用 deleted_snapshot 命令。删除快照不会影响到克隆表或者之后生成的快照。
<div>
<div>
<table border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>
<div>1</div></td>
<td>
<div>
<div><code>hbase&#62; delete_snapshot ‘snapshotName’</code></div>
</div></td>
</tr>
</tbody>
</table>
</div>
</div>
使用clone_snapshot命令从指定的快照生成新表（克隆）。由于不会产生数据复制，所以最终用到的数据不会是之前的两倍。
<div>
<div>
<table border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>
<div>1</div></td>
<td>
<div>
<div><code>hbase&#62; clone_snapshot ‘snapshotName’, ‘newTableName’</code></div>
</div></td>
</tr>
</tbody>
</table>
</div>
</div>
使用restore_snapshot命令将指定快照内容替换当前表结构/数据。
<div>
<div>
<table border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>
<div>1</div></td>
<td>
<div>
<div><code>hbase&#62; restore_snapshot ‘snapshotName’</code></div>
</div></td>
</tr>
</tbody>
</table>
</div>
</div>
使用ExportSnapshot工具将现有快照导出至其他集群。导出工具不会影响到域服务器负载，只是工作在HDFS层面所以需要指定HDFS路径（其他集群的hbase根目录）
<div>
<div>
<table border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
<div>3</div></td>
<td>
<div>
<div><code>hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot</code></div>
<div></div>
<div><code>SnapshotName -copy-to hdfs:///srv2:8082/hbase</code></div>
</div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div></div>
<div></div>
<div></div>
<div></div>
<div>scp命令：</div>
<div>MSVM07   NodFaAx2ya7T</div>
<div>scp -r <a href="mailto:root@172.30.251.123">root@</a>172.30.248.215:/dataDisk/hbaseCopy/AppCount  /dataDisk/hbaseCopy0516/AppCount</div>
<div></div>
<div>
<div>MSVM09   yc_123#DfGDfG</div>
<div>scp -r <a href="mailto:root@172.30.251.123">root@</a>172.30.249.21:/dataDisk/hbaseCopy/AppBaseInfoNew2 /dataDisk/hbaseCopy0516/AppBaseInfoNew2</div>
</div>
<div>
<div>MSVM06   sxd68eNydGET</div>
<div>scp -r <a href="mailto:root@172.30.251.123">root@</a>172.30.251.123:/dataDisk/hbaseCopy/AppBaseInfoNew2 /dataDisk/hbaseCopy0516/AppBaseInfoNew2</div>
</div>
<div></div>
<div>
<div>cd /dataDisk/bmx/hbase/bin</div>
</div>
<div>cd /dataDisk/hbaseCopy</div>]]></description>
		<wfw:commentRss>http://www.icartype.com/?feed=rss2&#038;p=204</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hadoop 2.6 日志文件和MapReduce的log文件研究心得</title>
		<link>http://www.icartype.com/?p=202</link>
		<comments>http://www.icartype.com/?p=202#comments</comments>
		<pubDate>Tue, 17 May 2016 09:49:07 +0000</pubDate>
		<dc:creator><![CDATA[lidasheng]]></dc:creator>
				<category><![CDATA[Hbase]]></category>

		<guid isPermaLink="false">http://www.icartype.com/?p=202</guid>
		<description><![CDATA[Hadoop 2.6包含两个大部分：DFS和Yarn，而Yarn里面又包含在Resource Manager的JVM中运行的部分和在Node Manager里面运行的JVM部分。所以整个系统（不考虑加装ZooKeeper的HA的情况）的log是分别放在3个log里面的。

1. 对于DFS的log，在Name Node和Data Node里面，默认可以在${HADOOP_INSTALL}/logs里面看到。这个是非DFS的文件，直接可以通过Linux文件系统看到。

2. 对于Yarn的log，在Resource Manager和Node Manager里面，默认可以在${HADOOP_INSTALL}/logs里面看到。这个也是非DFS的文件，直接可以通过Linux文件系统看到。
<blockquote>对于MapReduce任务的log，情况就比较的复杂了。在2.6里面，task是按照application-&#62;container的层次来管理的，所以在Name Node机器上运行mapreduce程序的时候，在console里面看到的log都可以通过在相应的data node/node manager里面的${HADOOP_INSTALL}/logs/userlogs下面找到。这个部分也是非DFS文件，直接可以通过Linux文件系统看到。

这些log也可以通过Hadoop Web管理页面看到，比较方便。</blockquote>
网络上搜来的信息基本都是关于上面这些部分的。可对于一个开发人员而言，上面这些log对于调试程序的帮助就不大了。Java程序员会经常要用System.out/err来输出中间内容到standard output，而且工业界早就用logger来记录系统状态和帮助调试了。那么我们在mapreduce程序体里面怎么来得到这些log哪。

首先讲讲System.out的输出，这个网络上的介绍还算详细。基本来说在main方法里面的部分都可以在console上输出。这一点不管是在Eclipse里面通过插件链接DFS运行on MapReduce的时候，还是直接在namenode上跑jar包，都可以看的到。直接编程读写DFS的程序也能够通过这个方法来看到中间结果和调试程序。而上面也说了，因为这个task的部分是运行在resource manager的启动的JVM里面（这个部分不是很确定，也许是单独启动的一个JVM），所以System.out的输出可以看到。而一旦程序进入Mapper和Reducer的部分，这个时候，任务是分发到datanode的机器里面跑，那里的JVM的输出就不会再返回到task的JVM了，所以在Mapper和Reducer里面的System.out输出是无法看到的。

那么这个时候怎么来写log哪?网络搜索的结果基本给了3个方法：1. 用log4j来生成logger；2. 用apache common里面的LogFactory生成logger；3. 用MultipleOutput来自己写log输出。

1和2本质是一样的，只是调用现成的Logger类。3是要自己管理log文件的生成和输出，灵活但是很累。

现在最关键的问题来了。我用Log4j或者LogFactory的Logger输出的log文件在哪里？搜了一天，基本讲的都语焉不详，特别是针对Hadoop 2.6的，没有找到。综合了几个帖子，终于发现了问题所在。为了能看到Logger输出的内容，需要做如下几件事：

1. 在启动Hadoop集群的时候，除了start-yarn.sh和start-dfs.sh，还要启动historyserver，命令是
<pre class="plain"> mr-jobhistory-daemon.sh start historyserver</pre>
mr-jobhistory-daemon.sh命令是在${HADOOP_INSTALL}/sbin/目录下面。启动完了，用jps命令可以看到有JobHistoryServer的进程启动。

启动了HistoryServer后，就可以看到Tracking URL里面的History了。<img src="http://doc.ithao123.cn/uploads02/u02/b3/ac/b3acfae858b4bca0d9bb75a789914c40.jpg" alt="\" />

还能在Hadoop Web管理界面里看到每个Job的历史Map和Reduce任务，以及每个任务所在的datanode。

<img src="http://doc.ithao123.cn/uploads02/u02/be/29/be29bff455e4f6ade9b639e6f56ed3b1.jpg" alt="\" />

点击Maps和Reduces后面的数字link，就能看到每个任务运行的情况。

<img src="http://doc.ithao123.cn/uploads02/u02/e3/37/e33740f552a514a5a9c3a1ab3477af80.jpg" alt="\" />

但是当去点击log的链接的时候，会碰到Aggregation function is not enabled错误。为了能看到每个Map和Reduce任务的Log，还必须在yarn-site.xml里面配置aggregation为true。
<pre class="html">  &#60;property&#62;     &#60;name&#62;yarn.log-aggregation-enable&#60;/name&#62;     &#60;value&#62;true&#60;/value&#62;     &#60;description&#62;Configuration to enable or disable log aggregation&#60;/description&#62;   &#60;/property&#62;</pre>
然后将yarn-site.xml同步到所有的节点，在重启集群。这个时候再点击上面那个logs链接，就可以看到每个任务的log了，而Logger们输出的内容也在里面！！

<img src="http://doc.ithao123.cn/uploads02/u02/f7/98/f798f8f47b0830c12778bb61310c1c1d.jpg" alt="\" />

到了这里，就只剩下一个问题了。这个log文件在哪里？查看yarn-site.xml后终于发现了MapReduce任务的log的位置。
<pre class="html">    &#60;name&#62;yarn.nodemanager.remote-app-log-dir&#60;/name&#62;     &#60;value&#62;/logs&#60;/value&#62;     &#60;description&#62;HDFS directory where the application logs are moved on application completion. Need to set appropriate permissions. Only applicable if log-aggregation is enabled. The default value is "/logs" or "/tmp/logs" &#60;/description&#62;   &#60;/property&#62;</pre>
注意红色字的部分，这里清楚的指明了这个log是存放在HDFS文件系统里面的，不是放在Linux文件系统里面的。在hdfs://namenode/logs/hadoop/logs里面，终于发现了每个任务对应的log文件夹。每个任务文件夹里有两个文件。分别对应的Map任务和Reduce任务。
<pre class="plain">[hadoop@SXV2V999 ~]$ hdfs dfs -ls hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001 15/04/29 23:02:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Found 2 items -rw-r-----   2 hadoop supergroup      58369 2015-04-29 13:32 hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001/&#60;strong&#62;&#60;em&#62;hostname&#60;/em&#62;&#60;/strong&#62;_39575 -rw-r-----   2 hadoop supergroup     399834 2015-04-29 13:32 hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001/&#60;strong&#62;&#60;em&#62;hostname&#60;/em&#62;&#60;/strong&#62;_54053</pre>
hostname部分是对应的datanode的hostname。

在Web页面里显示的也就是从这两个文件里读取并排版的。自此每个log文件的具体位置终于水落石出。

&#160;]]></description>
		<wfw:commentRss>http://www.icartype.com/?feed=rss2&#038;p=202</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MapReduce的jobstatus分析</title>
		<link>http://www.icartype.com/?p=200</link>
		<comments>http://www.icartype.com/?p=200#comments</comments>
		<pubDate>Tue, 17 May 2016 09:17:29 +0000</pubDate>
		<dc:creator><![CDATA[lidasheng]]></dc:creator>
				<category><![CDATA[Hbase]]></category>

		<guid isPermaLink="false">http://www.icartype.com/?p=200</guid>
		<description><![CDATA[下面是一个完整的mapreduce job status，现通过文字来说明mapreduce消耗的资源情况及名词含义。

2016-01-07 15:37:06  INFO Job:1383 - Job job_1443106373325_140563 completed successfully

2016-01-07 15:37:06  INFO Job:1390 - Counters: 52

File System Counters

FILE: Number of bytes read=50476611819          累计读取本地磁盘的文件数据大小，map和reduce端有排序，排序时需要读写本地文件。

FILE: Number of bytes written=44851815671       累计写入本地磁盘的文件数据大小，map和reduce端有排序，排序时需要读写本地文件，还有reduce做shuffle时，需要从map端拉取数据，也存在写入本地磁盘文件的情况。

FILE: Number of read operations=0

FILE: Number of large read operations=0

FILE: Number of write operations=0

HDFS: Number of bytes read=3285816319        整个job执行过程中，只有map端运行时，才从HDFS读取数据，这些数据不限于源文件内容，还包括所有map的split元数据

HDFS: Number of bytes written=350831425      Reduce的最终结果都会写入HDFS，就是一个job执行结果的总量。

HDFS: Number of read operations=1977

HDFS: Number of large read operations=0

HDFS: Number of write operations=600

Job Counters

Killed map tasks=3       此job失败了多少个map task

Launched map tasks=362      此job启动了多少个map task

Launched reduce tasks=300    此job启动了多少个reduce task

Other local map tasks=1

Data-local map tasks=320      Job在被调度时，如果启动了一个data-local(源文件的幅本在执行map task的taskTracker本地)

Rack-local map tasks=41

Total time spent by all maps in occupied slots (ms)=30745916

Total time spent by all reduces in occupied slots (ms)=7818313

Total time spent by all map tasks (ms)=30745916

Total time spent by all reduce tasks (ms)=7818313

Total vcore-seconds taken by all map tasks=30745916

Total vcore-seconds taken by all reduce tasks=7818313

Total megabyte-seconds taken by all map tasks=31483817984

Total megabyte-seconds taken by all reduce tasks=8005952512

Map-Reduce Framework

Map input records=123106620        所有map task从HDFS读取的文件总行数

Map output records=2708345640      map task的直接输出record是多少，就是在map方法中调用context.write的次数，也就是未经过Combine时的原生输出条数

Map output bytes=92998338307        Map的输出结果key/value都会被序列化到内存缓冲区中，所以这里的bytes指序列化后的最终字节之和

Map output materialized bytes=15102670672

Input split bytes=61748

Combine input records=0

Combine output records=0

Reduce input groups=22675333    Reduce总共读取了多少个这样的groups

Reduce shuffle bytes=15102670672   reduce往map拉取中间结果的累计数据大小，如果map产生的中间结果是压缩文件，它的值是压缩文件解压前的大小

Reduce input records=2708345640    如果有Combiner的话，那么这里的数值就等于map端Combiner运算后的最后条数，如果没有，那么就应该等于map的输出条数

Reduce output records=22675333   所有reduce执行后输出的总条目数

Spilled Records=8118445302   spill过程在map和reduce端都会发生，这里统计在总共从内存往磁盘中spill了多少条数据

Shuffled Maps =107700    每个reduce几乎都得从所有map端拉取数据，每个copy线程拉取成功一个map的数据，那么增1，所以它的总数基本等于 reduce number * map number

Failed Shuffles=0

Merged Map outputs=107700

GC time elapsed (ms)=865508

CPU time spent (ms)=46447150    每个task会读取对应进程的用户cpu时间和内核cpu时间，他们的和就是cpu时间。

Physical memory (bytes) snapshot=466476339200   这个是进程的当前物理内存使用大小。

Virtual memory (bytes) snapshot=887784427520    这个是进程的当前虚拟内存使用大小。

Total committed heap usage (bytes)=528945250304   每个task的jvm调用Runtime.getRuntime().totalMemory()获取jvm的当前堆大小。

Shuffle Errors

BAD_ID=0            如果reduce的copy线程抓取过来的元数据中这个ID不是标准格式，那么此Counter增加

CONNECTION=0        表示copy线程建立到map端的连接有误

IO_ERROR=0           Reduce的copy线程如果在抓取map端数据时出现IOException，那么这个值相应增加

WRONG_LENGTH=0    map端的那个中间结果是有压缩好的有格式数据，所有它有两个length信息：源数据大小与压缩后数据大小。如果这两个length信息传输的有误(负值)，那么此Counter增加

WRONG_MAP=0       如果当前抓取的map数据不是copy线程之前定义好的map，那么就表示把数据拉错了

WRONG_REDUCE=0    如果抓取的数据表示它不是为此reduce而准备的，那还是拉错数据了

File Input Format Counters

Bytes Read=3285754571                       Map task的所有输入数据(字节)，等于各个map task的map方法传入的所有value值字节之和。

File Output Format Counters

Bytes Written=350831425

2016-01-07 15:37:06  INFO BsnComHiveDaoImpl:989 - 结束运行mapreduce作业]]></description>
		<wfw:commentRss>http://www.icartype.com/?feed=rss2&#038;p=200</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HBase 定期备份</title>
		<link>http://www.icartype.com/?p=198</link>
		<comments>http://www.icartype.com/?p=198#comments</comments>
		<pubDate>Tue, 17 May 2016 06:43:59 +0000</pubDate>
		<dc:creator><![CDATA[lidasheng]]></dc:creator>
				<category><![CDATA[Hbase]]></category>

		<guid isPermaLink="false">http://www.icartype.com/?p=198</guid>
		<description><![CDATA[转载一份使用Export与Import定期备份的Python代码。每月15日做一次完整备份，每天进行一次增量备份。

import time
import datetime
from datetime import date
import sys
import os

tablename=sys.argv[1]
backupDst=sys.argv[2]
today=date.today()
if today.day == 15:    //every month, we do a full backup
backupSubFolder=backupDst+today.isoformat()+"-full"
cmd="hbase org.apache.<a title="Hadoop" href="http://www.linuxidc.com/topicnews.aspx?tid=13" target="_blank">Hadoop</a>.hbase.mapreduce.Export %s %s"%(tablename,backupSubFolder)
else:

yesterday=datetime.date.today()- datetime.timedelta(days=1)
todayTimeStamp=time.mktime(today.timetuple())
yesTimeStamp=time.mktime(yesterday.timetuple())
backupSubFolder=backupDst+today.isoformat()
cmd="hbase org.apache.hadoop.hbase.mapreduce.Export %s %s %s"%(tablename,backupSubFolder,str(int(todayTimeStamp)*1000)

print cmd

os.system(cmd)

注意最后的cmd字符串构建，视HBase版本在对应位置添加上版本号。]]></description>
		<wfw:commentRss>http://www.icartype.com/?feed=rss2&#038;p=198</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
