﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-to myself 的分类学习日志-随笔分类-search engine</title><link>http://www.cppblog.com/toMyself/category/17364.html</link><description>做自己想做的事</description><language>zh-cn</language><lastBuildDate>Thu, 05 Mar 2015 09:57:46 GMT</lastBuildDate><pubDate>Thu, 05 Mar 2015 09:57:46 GMT</pubDate><ttl>60</ttl><item><title>Lucene：索引文件的格式、搜索流程</title><link>http://www.cppblog.com/toMyself/archive/2015/03/03/209911.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Tue, 03 Mar 2015 08:54:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2015/03/03/209911.html</guid><wfw:comment>http://www.cppblog.com/toMyself/comments/209911.html</wfw:comment><comments>http://www.cppblog.com/toMyself/archive/2015/03/03/209911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/toMyself/comments/commentRss/209911.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/toMyself/services/trackbacks/209911.html</trackback:ping><description><![CDATA[<div>Lucene：索引文件的格式、搜索流程<br /><div>cfs.jpg：</div></div><img src="http://www.cppblog.com/images/cppblog_com/tomyself/cfs_xxx.jpg" border="0" alt="" /><br /><hr />cfe.jpg:<br /><div><img src="http://www.cppblog.com/images/cppblog_com/tomyself/cfe.jpg" width="900" height="480" alt="" /><br /><hr /><div>format.jpg：</div><img src="http://www.cppblog.com/images/cppblog_com/tomyself/format.jpg" width="900" height="1100" alt="" /><br /><hr /><div>search.jpg：<br /><img src="http://www.cppblog.com/images/cppblog_com/tomyself/search.jpg" border="0" alt="" /><br /><hr />参考：<br /><div>1.&nbsp;<a title="Lucene+3.0+原理与代码分析.pdf" href="/Files/toMyself/Lucene3.0原理与代码分析.pdf">Lucene+3.0+原理与代码分析.pdf</a><br /><br /><br /></div></div></div><img src ="http://www.cppblog.com/toMyself/aggbug/209911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2015-03-03 16:54 <a href="http://www.cppblog.com/toMyself/archive/2015/03/03/209911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZooKeeper的使用</title><link>http://www.cppblog.com/toMyself/archive/2015/02/27/209879.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Fri, 27 Feb 2015 03:15:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2015/02/27/209879.html</guid><wfw:comment>http://www.cppblog.com/toMyself/comments/209879.html</wfw:comment><comments>http://www.cppblog.com/toMyself/archive/2015/02/27/209879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/toMyself/comments/commentRss/209879.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/toMyself/services/trackbacks/209879.html</trackback:ping><description><![CDATA[总的使用场景：<br /><img src="http://www.cppblog.com/images/cppblog_com/tomyself/zookeeper_useall.gif" width="507" height="634" alt="" /><br /><br />使用设计1（/Configuration）：<br /><img src="http://www.cppblog.com/images/cppblog_com/tomyself/zookeeper_use.jpg" width="417" height="228" alt="" /><br /><br />OurService的代码示例：<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">*<br />&nbsp;*&nbsp;Licensed&nbsp;to&nbsp;the&nbsp;Apache&nbsp;Software&nbsp;Foundation&nbsp;(ASF)&nbsp;under&nbsp;one<br />&nbsp;*&nbsp;or&nbsp;more&nbsp;contributor&nbsp;license&nbsp;agreements.&nbsp;&nbsp;See&nbsp;the&nbsp;NOTICE&nbsp;file<br />&nbsp;*&nbsp;distributed&nbsp;with&nbsp;this&nbsp;work&nbsp;for&nbsp;additional&nbsp;information<br />&nbsp;*&nbsp;regarding&nbsp;copyright&nbsp;ownership.&nbsp;&nbsp;The&nbsp;ASF&nbsp;licenses&nbsp;this&nbsp;file<br />&nbsp;*&nbsp;to&nbsp;you&nbsp;under&nbsp;the&nbsp;Apache&nbsp;License,&nbsp;Version&nbsp;2.0&nbsp;(the<br />&nbsp;*&nbsp;"License");&nbsp;you&nbsp;may&nbsp;not&nbsp;use&nbsp;this&nbsp;file&nbsp;except&nbsp;in&nbsp;compliance<br />&nbsp;*&nbsp;with&nbsp;the&nbsp;License.&nbsp;&nbsp;You&nbsp;may&nbsp;obtain&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;License&nbsp;at<br />&nbsp;*<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; text-decoration: underline; ">http://www.apache.org/licenses/LICENSE-2.0</span><span style="color: #008000; "><br />&nbsp;*<br />&nbsp;*&nbsp;Unless&nbsp;required&nbsp;by&nbsp;applicable&nbsp;law&nbsp;or&nbsp;agreed&nbsp;to&nbsp;in&nbsp;writing,&nbsp;software<br />&nbsp;*&nbsp;distributed&nbsp;under&nbsp;the&nbsp;License&nbsp;is&nbsp;distributed&nbsp;on&nbsp;an&nbsp;"AS&nbsp;IS"&nbsp;BASIS,<br />&nbsp;*&nbsp;WITHOUT&nbsp;WARRANTIES&nbsp;OR&nbsp;CONDITIONS&nbsp;OF&nbsp;ANY&nbsp;KIND,&nbsp;either&nbsp;express&nbsp;or&nbsp;implied.<br />&nbsp;*&nbsp;See&nbsp;the&nbsp;License&nbsp;for&nbsp;the&nbsp;specific&nbsp;language&nbsp;governing&nbsp;permissions&nbsp;and<br />&nbsp;*&nbsp;limitations&nbsp;under&nbsp;the&nbsp;License.<br />&nbsp;</span><span style="color: #008000; ">*/</span><br /><br />#include&nbsp;&lt;zookeeper.h&gt;<br />#include&nbsp;&lt;proto.h&gt;<br />#include&nbsp;&lt;stdlib.h&gt;<br />#include&nbsp;&lt;stdio.h&gt;<br />#include&nbsp;&lt;<span style="color: #0000FF; ">string</span>.h&gt;<br /><br />#ifndef&nbsp;WIN32<br />#include&nbsp;&lt;sys/time.h&gt;<br />#include&nbsp;&lt;unistd.h&gt;<br />#include&nbsp;&lt;sys/select.h&gt;<br /><span style="color: #0000FF; ">#else</span><br />#include&nbsp;"winport.h"<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">#include&nbsp;&lt;io.h&gt;&nbsp;&lt;--&nbsp;can't&nbsp;include,&nbsp;conflicting&nbsp;definitions&nbsp;of&nbsp;close()</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">int</span>&nbsp;read(<span style="color: #0000FF; ">int</span>&nbsp;_FileHandle,&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*&nbsp;_DstBuf,&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_MaxCharCount);<br /><span style="color: #0000FF; ">int</span>&nbsp;write(<span style="color: #0000FF; ">int</span>&nbsp;_Filehandle,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*&nbsp;_Buf,&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_MaxCharCount);<br /><span style="color: #0000FF; ">#define</span>&nbsp;ctime_r(tctime,&nbsp;buffer)&nbsp;ctime_s&nbsp;(buffer,&nbsp;40,&nbsp;tctime)<br /><span style="color: #0000FF; ">#endif</span><br /><br />#include&nbsp;&lt;time.h&gt;<br />#include&nbsp;&lt;errno.h&gt;<br />#include&nbsp;&lt;assert.h&gt;<br /><br /><span style="color: #0000FF; ">#define</span>&nbsp;_LL_CAST_&nbsp;(long&nbsp;long)<br /><br /><span style="color: #0000FF; ">static</span>&nbsp;zhandle_t&nbsp;*zh;<br /><span style="color: #0000FF; ">static</span>&nbsp;clientid_t&nbsp;myid;<br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*clientIdFile&nbsp;=&nbsp;0;<br /><span style="color: #0000FF; ">struct</span>&nbsp;timeval&nbsp;startTime;<br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;shutdownThisThing&nbsp;=&nbsp;0;<br /><br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;state2String(<span style="color: #0000FF; ">int</span>&nbsp;state)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"CLOSED_STATE";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_CONNECTING_STATE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"CONNECTING_STATE";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_ASSOCIATING_STATE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"ASSOCIATING_STATE";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_CONNECTED_STATE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"CONNECTED_STATE";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_EXPIRED_SESSION_STATE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"EXPIRED_SESSION_STATE";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_AUTH_FAILED_STATE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"AUTH_FAILED_STATE";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"INVALID_STATE";<br />}<br /><br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;type2String(<span style="color: #0000FF; ">int</span>&nbsp;state)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_CREATED_EVENT)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"CREATED_EVENT";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_DELETED_EVENT)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"DELETED_EVENT";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_CHANGED_EVENT)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"CHANGED_EVENT";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_CHILD_EVENT)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"CHILD_EVENT";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_SESSION_EVENT)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"SESSION_EVENT";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_NOTWATCHING_EVENT)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"NOTWATCHING_EVENT";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"UNKNOWN_EVENT_TYPE";<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;dumpStat(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Stat&nbsp;*stat)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;tctimes[40];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;tmtimes[40];<br />&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;tctime;<br />&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;tmtime;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!stat)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"null\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;tctime&nbsp;=&nbsp;stat-&gt;ctime&nbsp;/&nbsp;1000;<br />&nbsp;&nbsp;&nbsp;&nbsp;tmtime&nbsp;=&nbsp;stat-&gt;mtime&nbsp;/&nbsp;1000;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ctime_r(&amp;tmtime,&nbsp;tmtimes);<br />&nbsp;&nbsp;&nbsp;&nbsp;ctime_r(&amp;tctime,&nbsp;tctimes);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"\tctime&nbsp;=&nbsp;%s\tczxid=%llx\n"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\tmtime=%s\tmzxid=%llx\n"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\tversion=%x\taversion=%x\n"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\tephemeralOwner&nbsp;=&nbsp;%llx\n",&nbsp;tctimes,&nbsp;_LL_CAST_&nbsp;stat-&gt;czxid,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmtimes,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_LL_CAST_&nbsp;stat-&gt;mzxid,&nbsp;(unsigned&nbsp;<span style="color: #0000FF; ">int</span>)&nbsp;stat-&gt;version,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unsigned&nbsp;<span style="color: #0000FF; ">int</span>)&nbsp;stat-&gt;aversion,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_LL_CAST_&nbsp;stat-&gt;ephemeralOwner);<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;my_data_completion(<span style="color: #0000FF; ">int</span>&nbsp;rc,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*value,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;value_len,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Stat&nbsp;*stat,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*data)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;timeval&nbsp;tv;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;sec;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;usec;<br />&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;tv,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;sec&nbsp;=&nbsp;tv.tv_sec&nbsp;-&nbsp;startTime.tv_sec;<br />&nbsp;&nbsp;&nbsp;&nbsp;usec&nbsp;=&nbsp;tv.tv_usec&nbsp;-&nbsp;startTime.tv_usec;<br />&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"time&nbsp;=&nbsp;%d&nbsp;msec\n",&nbsp;sec&nbsp;*&nbsp;1000&nbsp;+&nbsp;usec&nbsp;/&nbsp;1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"%s:&nbsp;rc&nbsp;=&nbsp;%d\n",&nbsp;(<span style="color: #0000FF; ">char</span>*)&nbsp;data,&nbsp;rc);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(value)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"&nbsp;value_len&nbsp;=&nbsp;%d\n",&nbsp;value_len);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert(write(2,&nbsp;value,&nbsp;value_len)&nbsp;==&nbsp;value_len);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"\nStat:\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;dumpStat(stat);<br />&nbsp;&nbsp;&nbsp;&nbsp;free((<span style="color: #0000FF; ">void</span>*)&nbsp;data);<br />}<br /><br /><br /><span style="color: #0000FF; ">void</span>&nbsp;my_strings_completion(<span style="color: #0000FF; ">int</span>&nbsp;rc,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;String_vector&nbsp;*strings,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*data)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;timeval&nbsp;tv;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;sec;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;usec;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;tv,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;sec&nbsp;=&nbsp;tv.tv_sec&nbsp;-&nbsp;startTime.tv_sec;<br />&nbsp;&nbsp;&nbsp;&nbsp;usec&nbsp;=&nbsp;tv.tv_usec&nbsp;-&nbsp;startTime.tv_usec;<br />&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"time&nbsp;=&nbsp;%d&nbsp;msec\n",&nbsp;sec&nbsp;*&nbsp;1000&nbsp;+&nbsp;usec&nbsp;/&nbsp;1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"%s:&nbsp;rc&nbsp;=&nbsp;%d\n",&nbsp;(<span style="color: #0000FF; ">char</span>*)&nbsp;data,&nbsp;rc);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(strings)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;strings-&gt;count;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"\t%s\n",&nbsp;strings-&gt;data[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;free((<span style="color: #0000FF; ">void</span>*)&nbsp;data);<br />&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;tv,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;sec&nbsp;=&nbsp;tv.tv_sec&nbsp;-&nbsp;startTime.tv_sec;<br />&nbsp;&nbsp;&nbsp;&nbsp;usec&nbsp;=&nbsp;tv.tv_usec&nbsp;-&nbsp;startTime.tv_usec;<br />&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"time&nbsp;=&nbsp;%d&nbsp;msec\n",&nbsp;sec&nbsp;*&nbsp;1000&nbsp;+&nbsp;usec&nbsp;/&nbsp;1000);<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;watcher(zhandle_t&nbsp;*zzh,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;type,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;state,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*path,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>*&nbsp;context)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Be&nbsp;careful&nbsp;using&nbsp;zh&nbsp;here&nbsp;rather&nbsp;than&nbsp;zzh&nbsp;-&nbsp;as&nbsp;this&nbsp;may&nbsp;be&nbsp;mt&nbsp;code<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;the&nbsp;client&nbsp;lib&nbsp;may&nbsp;call&nbsp;the&nbsp;watcher&nbsp;before&nbsp;zookeeper_init&nbsp;returns&nbsp;</span><span style="color: #008000; ">*/</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"Watcher&nbsp;%s&nbsp;state&nbsp;=&nbsp;%s",&nbsp;type2String(type),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state2String(state));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(path&nbsp;&amp;&amp;&nbsp;strlen(path)&nbsp;&gt;&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"&nbsp;for&nbsp;path&nbsp;%s",&nbsp;path);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"\n");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(type&nbsp;==&nbsp;ZOO_SESSION_EVENT)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_CONNECTED_STATE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;clientid_t&nbsp;*id&nbsp;=&nbsp;zoo_client_id(zzh);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(myid.client_id&nbsp;==&nbsp;0&nbsp;||&nbsp;myid.client_id&nbsp;!=&nbsp;id-&gt;client_id)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myid&nbsp;=&nbsp;*id;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"Got&nbsp;a&nbsp;new&nbsp;session&nbsp;id:&nbsp;0x%llx\n",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_LL_CAST_&nbsp;myid.client_id);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(clientIdFile)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*fh&nbsp;=&nbsp;fopen(clientIdFile,&nbsp;"w");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!fh)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(clientIdFile);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;rc&nbsp;=&nbsp;fwrite(&amp;myid,&nbsp;<span style="color: #0000FF; ">sizeof</span>(myid),&nbsp;1,&nbsp;fh);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(rc&nbsp;!=&nbsp;<span style="color: #0000FF; ">sizeof</span>(myid))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror("writing&nbsp;client&nbsp;id");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fh);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_AUTH_FAILED_STATE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"Authentication&nbsp;failure.&nbsp;Shutting&nbsp;down<img src="http://www.cppblog.com/Images/dot.gif" alt="" />\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zookeeper_close(zzh);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shutdownThisThing&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zh&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;ZOO_EXPIRED_SESSION_STATE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"Session&nbsp;expired.&nbsp;Shutting&nbsp;down<img src="http://www.cppblog.com/Images/dot.gif" alt="" />\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zookeeper_close(zzh);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shutdownThisThing&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zh&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(type&nbsp;==&nbsp;ZOO_CHILD_EVENT)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;startTime,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*path&nbsp;=&nbsp;"/";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;rc&nbsp;=&nbsp;zoo_aget_children(zh,&nbsp;path,&nbsp;1,&nbsp;my_strings_completion,&nbsp;strdup(path));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(rc)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"Error&nbsp;%d&nbsp;for&nbsp;zoo_aget_children&nbsp;%s\n",&nbsp;rc,&nbsp;path);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(type&nbsp;==&nbsp;ZOO_CHANGED_EVENT)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;startTime,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*sub_path&nbsp;=&nbsp;"/zk_test";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;rc&nbsp;=&nbsp;zoo_aget(zh,&nbsp;sub_path,&nbsp;1,&nbsp;my_data_completion,&nbsp;strdup(sub_path));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(rc)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"Error&nbsp;%d&nbsp;for&nbsp;zoo_aget&nbsp;%s\n",&nbsp;rc,&nbsp;sub_path);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;**argv)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;fd_set&nbsp;rfds,&nbsp;wfds,&nbsp;efds;<br />&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*fh;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(argc&nbsp;&lt;&nbsp;2)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"USAGE&nbsp;%s&nbsp;zookeeper_host_list&nbsp;[clientid_file]\n",&nbsp;argv[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"Version:&nbsp;ZooKeeper&nbsp;cli&nbsp;(c&nbsp;client)&nbsp;version&nbsp;%d.%d.%d\n",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZOO_MAJOR_VERSION,&nbsp;ZOO_MINOR_VERSION,&nbsp;ZOO_PATCH_VERSION);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;2;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(argc&nbsp;&gt;&nbsp;2)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientIdFile&nbsp;=&nbsp;argv[2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fh&nbsp;=&nbsp;fopen(clientIdFile,&nbsp;"r");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(fh)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(fread(&amp;myid,&nbsp;<span style="color: #0000FF; ">sizeof</span>(myid),&nbsp;1,&nbsp;fh)&nbsp;!=&nbsp;<span style="color: #0000FF; ">sizeof</span>(myid))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(&amp;myid,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(myid));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fh);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;zoo_set_debug_level(ZOO_LOG_LEVEL_WARN);<br />&nbsp;&nbsp;&nbsp;&nbsp;zoo_deterministic_conn_order(1);&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;enable&nbsp;deterministic&nbsp;order</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*hostPort&nbsp;=&nbsp;argv[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;zh&nbsp;=&nbsp;zookeeper_init(hostPort,&nbsp;watcher,&nbsp;30000,&nbsp;&amp;myid,&nbsp;0,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!zh)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;errno;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;rc;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;startTime,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*path&nbsp;=&nbsp;"/";<br />&nbsp;&nbsp;&nbsp;&nbsp;rc&nbsp;=&nbsp;zoo_aget_children(zh,&nbsp;path,&nbsp;1,&nbsp;my_strings_completion,&nbsp;strdup(path));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(rc)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"Error&nbsp;%d&nbsp;for&nbsp;zoo_aget_children&nbsp;%s\n",&nbsp;rc,&nbsp;path);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*sub_path&nbsp;=&nbsp;"/zk_test";<br />&nbsp;&nbsp;&nbsp;&nbsp;rc&nbsp;=&nbsp;zoo_aget(zh,&nbsp;sub_path,&nbsp;1,&nbsp;my_data_completion,&nbsp;strdup(sub_path));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(rc)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"Error&nbsp;%d&nbsp;for&nbsp;zoo_aget&nbsp;%s\n",&nbsp;rc,&nbsp;sub_path);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;FD_ZERO(&amp;rfds);<br />&nbsp;&nbsp;&nbsp;&nbsp;FD_ZERO(&amp;wfds);<br />&nbsp;&nbsp;&nbsp;&nbsp;FD_ZERO(&amp;efds);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(shutdownThisThing)&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;reinit</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zh&nbsp;=&nbsp;zookeeper_init(hostPort,&nbsp;watcher,&nbsp;30000,&nbsp;&amp;myid,&nbsp;0,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!zh)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;errno;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;startTime,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*path&nbsp;=&nbsp;"/";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc&nbsp;=&nbsp;zoo_aget_children(zh,&nbsp;path,&nbsp;1,&nbsp;my_strings_completion,&nbsp;strdup(path));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(rc)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"Error&nbsp;%d&nbsp;for&nbsp;zoo_aget_children&nbsp;%s\n",&nbsp;rc,&nbsp;path);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fd;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;interest;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;events;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;timeval&nbsp;tv;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc&nbsp;=&nbsp;zookeeper_interest(zh,&nbsp;&amp;fd,&nbsp;&amp;interest,&nbsp;&amp;tv);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(rc&nbsp;!=&nbsp;ZOK)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"fail&nbsp;to&nbsp;interest&nbsp;zookeeper,&nbsp;return&nbsp;%d.\n",&nbsp;rc);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(fd&nbsp;!=&nbsp;-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(interest&nbsp;&amp;&nbsp;ZOOKEEPER_READ)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FD_SET(fd,&nbsp;&amp;rfds);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FD_CLR(fd,&nbsp;&amp;rfds);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(interest&nbsp;&amp;&nbsp;ZOOKEEPER_WRITE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FD_SET(fd,&nbsp;&amp;wfds);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FD_CLR(fd,&nbsp;&amp;wfds);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc&nbsp;=&nbsp;select(fd&nbsp;+&nbsp;1,&nbsp;&amp;rfds,&nbsp;&amp;wfds,&nbsp;&amp;efds,&nbsp;&amp;tv);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;events&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(rc&nbsp;&gt;&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(FD_ISSET(fd,&nbsp;&amp;rfds))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;events&nbsp;|=&nbsp;ZOOKEEPER_READ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(FD_ISSET(fd,&nbsp;&amp;wfds))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;events&nbsp;|=&nbsp;ZOOKEEPER_WRITE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"event&nbsp;%d&nbsp;has&nbsp;happened.\n",&nbsp;events);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zookeeper_process(zh,&nbsp;events);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;zookeeper_close(zh);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div>OurService示例代码的功能：<br />&nbsp; &nbsp;1. 监视根目录下znode的变化情况。<br />&nbsp; &nbsp;2. 监控znode /zk_test 的值的变化情况。<br /><br /><br />使用设计2（/GroupMembers or /Apps）：<br />App在启动的时候连接到ZooKeeper，并创建一个对应的临时的znode，当该App崩溃时，该znode会被删除。创建临时znode的代码示例如下：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*path&nbsp;=&nbsp;"/Apps/App1";<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*value&nbsp;=&nbsp;"new";<br /><span style="color: #0000FF; ">int</span>&nbsp;flags&nbsp;=&nbsp;ZOO_EPHEMERAL;<br />zoo_acreate(zh,&nbsp;path,&nbsp;value,&nbsp;strlen(value),&nbsp;&amp;ZOO_OPEN_ACL_UNSAFE,&nbsp;flags,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my_string_completion_free_data,&nbsp;strdup(path));</div><br />使用设计3（Lock）：<br />create znode 时使用&nbsp;<span style="font-size: 13px; background-color: #eeeeee;">ZOO_SEQUENCE&nbsp;</span>标志可以实现为指定的path追加序列号，序列号从&#8220;0000000000&#8221;开始，每创建一次，序列号加1。<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*path&nbsp;=&nbsp;"/_locknode_/lock-";<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*value&nbsp;=&nbsp;"new";<br /><span style="color: #0000FF; ">int</span>&nbsp;flags&nbsp;=&nbsp;ZOO_EPHEMERAL&nbsp;|&nbsp;ZOO_SEQUENCE;<br />zoo_acreate(zh,&nbsp;path,&nbsp;value,&nbsp;strlen(value),&nbsp;&amp;ZOO_OPEN_ACL_UNSAFE,&nbsp;flags,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; my_string_completion_free_data,&nbsp;strdup(path));</div>注：<br />1.&nbsp;<span style="font-size: 13px; background-color: #eeeeee;">zoo_acreate&nbsp;</span>之后会在回调函数&nbsp;<span style="font-size: 13px; background-color: #eeeeee;">my_string_completion_free_data&nbsp;</span>中返回本次创建的path的名字。<br />2. 在创建完成之后，调用 zoo_aget_children("/_locknode_") 可以获得该目录下的znode列表，比较自己创建的path name和这个列表，看看自己的序列号是不是最小的，如果是，那么就认为自己获得了锁。<br /><br /><br /><br /><img src ="http://www.cppblog.com/toMyself/aggbug/209879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2015-02-27 11:15 <a href="http://www.cppblog.com/toMyself/archive/2015/02/27/209879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene 分析器</title><link>http://www.cppblog.com/toMyself/archive/2015/01/28/209656.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Wed, 28 Jan 2015 07:24:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2015/01/28/209656.html</guid><wfw:comment>http://www.cppblog.com/toMyself/comments/209656.html</wfw:comment><comments>http://www.cppblog.com/toMyself/archive/2015/01/28/209656.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/toMyself/comments/commentRss/209656.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/toMyself/services/trackbacks/209656.html</trackback:ping><description><![CDATA[打印语汇单元组成<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;org.apache.lucene.demo;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.Reader;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.StringReader;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.Analyzer;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.Analyzer.ReuseStrategy;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.TokenStream;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.Analyzer.TokenStreamComponents;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.Tokenizer;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.compound.TestCompoundWordTokenFilter.MockRetainAttribute;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.core.SimpleAnalyzer;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.core.StopAnalyzer;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.core.WhitespaceAnalyzer;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.standard.StandardAnalyzer;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.tokenattributes.CharTermAttribute;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.tokenattributes.KeywordAttribute;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.tokenattributes.OffsetAttribute;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.analysis.util.CharTokenizer;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.lucene.util.Version;<br /><br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;AnalysisTxt&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String[]&nbsp;examples&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"The&nbsp;quick&nbsp;brown&nbsp;fox&nbsp;jumped&nbsp;over&nbsp;the&nbsp;lazy&nbsp;dog",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"XY&amp;Z&nbsp;Corporation&nbsp;-&nbsp;xyz@example.com"<br />&nbsp;&nbsp;&nbsp;&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Analyzer[]&nbsp;analyzers&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Analyzer[]&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;WhitespaceAnalyzer(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;SimpleAnalyzer(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;StopAnalyzer(Version.LUCENE_4_10_3),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;StandardAnalyzer(Version.LUCENE_4_10_3)<br />&nbsp;&nbsp;&nbsp;&nbsp;};<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;strings&nbsp;=&nbsp;examples;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(args.length&nbsp;&gt;&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strings&nbsp;=&nbsp;args;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(String&nbsp;text&nbsp;:&nbsp;strings)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;analyze(text);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;analyze(String&nbsp;text)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Analyzing&nbsp;\""&nbsp;+&nbsp;text&nbsp;+&nbsp;"\"");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(Analyzer&nbsp;analyzer&nbsp;:&nbsp;analyzers)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name&nbsp;=&nbsp;analyzer.getClass().getSimpleName();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("&nbsp;&nbsp;"&nbsp;+&nbsp;name&nbsp;+&nbsp;":");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("&nbsp;&nbsp;&nbsp;&nbsp;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AnalyzerUtils.displayTokens(analyzer,&nbsp;text);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(IOException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br /><span style="color: #0000FF; ">class</span>&nbsp;AnalyzerUtils&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;displayTokens(Analyzer&nbsp;analyzer,&nbsp;String&nbsp;text)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fieldName&nbsp;=&nbsp;"contens";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reader&nbsp;reader&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;StringReader(text);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TokenStream&nbsp;stream&nbsp;=&nbsp;analyzer.tokenStream(fieldName,&nbsp;reader);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream.reset();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displayTokens(stream);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;displayTokens(TokenStream&nbsp;stream)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CharTermAttribute&nbsp;term&nbsp;=&nbsp;stream.addAttribute(CharTermAttribute.<span style="color: #0000FF; ">class</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PositionIncrementAttribute&nbsp;posIncrAtt&nbsp;=&nbsp;stream.addAttribute(PositionIncrementAttribute.<span style="color: #0000FF; ">class</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OffsetAttribute&nbsp;offsetAtt&nbsp;=&nbsp;stream.addAttribute(OffsetAttribute.<span style="color: #0000FF; ">class</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(stream.incrementToken())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("["&nbsp;+&nbsp;term.toString()&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;",&nbsp;"&nbsp;+&nbsp;posIncrAtt.getPositionIncrement()&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;",&nbsp;"&nbsp;+&nbsp;offsetAtt.startOffset()&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;"&nbsp;~&nbsp;"&nbsp;+&nbsp;offsetAtt.endOffset()&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;"]&nbsp;&nbsp;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br /><br />输出：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->Analyzing&nbsp;"The&nbsp;quick&nbsp;brown&nbsp;fox&nbsp;jumped&nbsp;over&nbsp;the&nbsp;lazy&nbsp;dog"<br />&nbsp;&nbsp;WhitespaceAnalyzer:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">The,&nbsp;1,&nbsp;0&nbsp;~&nbsp;3</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">quick,&nbsp;1,&nbsp;4&nbsp;~&nbsp;9</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">brown,&nbsp;1,&nbsp;10&nbsp;~&nbsp;15</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">fox,&nbsp;1,&nbsp;16&nbsp;~&nbsp;19</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">jumped,&nbsp;1,&nbsp;20&nbsp;~&nbsp;26</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">over,&nbsp;1,&nbsp;27&nbsp;~&nbsp;31</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">the,&nbsp;1,&nbsp;32&nbsp;~&nbsp;35</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">lazy,&nbsp;1,&nbsp;36&nbsp;~&nbsp;40</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">dog,&nbsp;1,&nbsp;41&nbsp;~&nbsp;44</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;SimpleAnalyzer:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">the,&nbsp;1,&nbsp;0&nbsp;~&nbsp;3</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">quick,&nbsp;1,&nbsp;4&nbsp;~&nbsp;9</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">brown,&nbsp;1,&nbsp;10&nbsp;~&nbsp;15</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">fox,&nbsp;1,&nbsp;16&nbsp;~&nbsp;19</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">jumped,&nbsp;1,&nbsp;20&nbsp;~&nbsp;26</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">over,&nbsp;1,&nbsp;27&nbsp;~&nbsp;31</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">the,&nbsp;1,&nbsp;32&nbsp;~&nbsp;35</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">lazy,&nbsp;1,&nbsp;36&nbsp;~&nbsp;40</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">dog,&nbsp;1,&nbsp;41&nbsp;~&nbsp;44</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;StopAnalyzer:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">quick,&nbsp;2,&nbsp;4&nbsp;~&nbsp;9</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">brown,&nbsp;1,&nbsp;10&nbsp;~&nbsp;15</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">fox,&nbsp;1,&nbsp;16&nbsp;~&nbsp;19</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">jumped,&nbsp;1,&nbsp;20&nbsp;~&nbsp;26</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">over,&nbsp;1,&nbsp;27&nbsp;~&nbsp;31</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">lazy,&nbsp;2,&nbsp;36&nbsp;~&nbsp;40</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">dog,&nbsp;1,&nbsp;41&nbsp;~&nbsp;44</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;StandardAnalyzer:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">quick,&nbsp;2,&nbsp;4&nbsp;~&nbsp;9</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">brown,&nbsp;1,&nbsp;10&nbsp;~&nbsp;15</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">fox,&nbsp;1,&nbsp;16&nbsp;~&nbsp;19</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">jumped,&nbsp;1,&nbsp;20&nbsp;~&nbsp;26</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">over,&nbsp;1,&nbsp;27&nbsp;~&nbsp;31</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">lazy,&nbsp;2,&nbsp;36&nbsp;~&nbsp;40</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">dog,&nbsp;1,&nbsp;41&nbsp;~&nbsp;44</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<br /><br />Analyzing&nbsp;"XY&amp;Z&nbsp;Corporation&nbsp;-&nbsp;xyz@example.com"<br />&nbsp;&nbsp;WhitespaceAnalyzer:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">XY&amp;Z,&nbsp;1,&nbsp;0&nbsp;~&nbsp;4</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">Corporation,&nbsp;1,&nbsp;5&nbsp;~&nbsp;16</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">-,&nbsp;1,&nbsp;17&nbsp;~&nbsp;18</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">xyz@example.com,&nbsp;1,&nbsp;19&nbsp;~&nbsp;34</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;SimpleAnalyzer:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">xy,&nbsp;1,&nbsp;0&nbsp;~&nbsp;2</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">z,&nbsp;1,&nbsp;3&nbsp;~&nbsp;4</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">corporation,&nbsp;1,&nbsp;5&nbsp;~&nbsp;16</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">xyz,&nbsp;1,&nbsp;19&nbsp;~&nbsp;22</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">example,&nbsp;1,&nbsp;23&nbsp;~&nbsp;30</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">com,&nbsp;1,&nbsp;31&nbsp;~&nbsp;34</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;StopAnalyzer:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">xy,&nbsp;1,&nbsp;0&nbsp;~&nbsp;2</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">z,&nbsp;1,&nbsp;3&nbsp;~&nbsp;4</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">corporation,&nbsp;1,&nbsp;5&nbsp;~&nbsp;16</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">xyz,&nbsp;1,&nbsp;19&nbsp;~&nbsp;22</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">example,&nbsp;1,&nbsp;23&nbsp;~&nbsp;30</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">com,&nbsp;1,&nbsp;31&nbsp;~&nbsp;34</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;StandardAnalyzer:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">xy,&nbsp;1,&nbsp;0&nbsp;~&nbsp;2</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">z,&nbsp;1,&nbsp;3&nbsp;~&nbsp;4</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">corporation,&nbsp;1,&nbsp;5&nbsp;~&nbsp;16</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">xyz,&nbsp;1,&nbsp;19&nbsp;~&nbsp;22</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">example.com,&nbsp;1,&nbsp;23&nbsp;~&nbsp;34</span><span style="color: #800000; font-weight: bold; ">]</span>&nbsp;&nbsp;</div><br /><br /><br /><br /><img src ="http://www.cppblog.com/toMyself/aggbug/209656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2015-01-28 15:24 <a href="http://www.cppblog.com/toMyself/archive/2015/01/28/209656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搜索引擎行业信息</title><link>http://www.cppblog.com/toMyself/archive/2011/07/22/151629.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Fri, 22 Jul 2011 05:58:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2011/07/22/151629.html</guid><wfw:comment>http://www.cppblog.com/toMyself/comments/151629.html</wfw:comment><comments>http://www.cppblog.com/toMyself/archive/2011/07/22/151629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/toMyself/comments/commentRss/151629.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/toMyself/services/trackbacks/151629.html</trackback:ping><description><![CDATA[2010国内搜索引擎排行榜<br />1、百度：百度是中国互联网用户最常用的搜索引擎，每天完成上亿次搜索；也是全球最大的中文搜索引擎.<br />2、谷歌：Google 的使命是整合全球范围的信息，使人人皆可访问并从中受益。<br />3、SOGOU：搜狗是搜狐公司于2004年8月3日推出的全球首个第三代互动式中文搜索引擎。搜狗以搜索技术为核心，致力于中文互联网信息的深度挖掘，帮助中国上亿网民加快搜索速度.<br />4、SOSO：QQ推出的独立搜索网站。提供综合、网页、图片、论坛、音乐、搜吧等搜索服务。<br /><a href="http://www.soso.com/">http://www.soso.com/</a><br />北京市海淀区海淀大街38号银科大厦<br />5、微软必应2009年6月1日，微软新搜索引擎Bing(必应)中文版上线。测试版必应提供了六个功能：页面搜索、图片搜索、资讯搜索、视频搜索、地图搜索以及排行榜。<br />6、YAHOO中国：Yahoo! 全球性搜索技术（YST，Yahoo! Search Technology）是一个涵盖全球120多亿网页（其中雅虎中国为12亿）的强大数据库，拥有数十项技术专利、精准运算能力，支持38种语言，近10,000台服务器，服务全球50%以上互联网用户的搜索需求。<br /><a href="http://cn.yahoo.com/">http://cn.yahoo.com/</a><br />北京市朝阳区东四环中路56号远洋国际中心A座30F<br />7、网易有道搜索：网易自主研发的搜索引擎。目前有道搜索已推出的产品包括网页搜索、博客搜索、图片搜索、新闻搜索、海量词典、桌面词典、工具栏和有道阅读。<br /><a href="http://www.youdao.com/">http://www.youdao.com/</a><br />北京市海淀区清华科技园创业大厦2楼<br />8、新浪搜索 全球最大的中文网络门户新浪汇集技术精英、耗时一年多完全自主研发完成，采用了目前最为领先的智慧型互动搜索技术，充分体现了人性化应用理念，将给网络搜索市场带来前所未有的挑战。&nbsp; <br /><a href="http://search.sina.com.cn/">http://search.sina.com.cn/</a><br />北京市海淀区北四环西路58号理想国际大厦20层<br />新浪爱问搜索引擎：<a href="http://www.sowang.com/sinacha.htm">http://www.sowang.com/sinacha.htm</a><br />9、中国搜索 中搜在2002年进入中文搜索引擎市场，为全球最大的中文搜索引擎技术供应和服务商之一，曾为新浪、TOM、网易等国内主流门户网站以及各地区、各行业上千家中国搜索联盟网站提供搜索引擎技术服务。2004年中搜进入个人门户，2006年推出个人门户IG（Internet Gateway），完成了互联网从传统搜索引擎到个人门户的跨越，中搜一举从搜索引擎的推动者转变为个人门户领导者<br />10、TOM搜索 TOM最早建立的中国门户网站之一,与谷歌合作建立中文搜索引擎.<br /><br /><br /><br />搜索引擎参考：<br />1，<a href="http://bbs.sowang.com/">http://bbs.sowang.com/</a><br />2，<a href="http://www.sowang.com/">http://www.sowang.com/</a><br />3，<a href="http://en.wikipedia.org/wiki/List_of_search_engines">http://en.wikipedia.org/wiki/List_of_search_engines</a><br />4，<a href="http://en.wikipedia.org/wiki/Web_search_engine">http://en.wikipedia.org/wiki/Web_search_engine</a><br /><br /><br /><br /><br /><img src ="http://www.cppblog.com/toMyself/aggbug/151629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2011-07-22 13:58 <a href="http://www.cppblog.com/toMyself/archive/2011/07/22/151629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>