You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2011/03/15 22:35:35 UTC

svn commit: r1081952 [6/17] - in /lucene/dev/branches/bulkpostings: ./ dev-tools/ dev-tools/eclipse/ dev-tools/idea/ dev-tools/idea/.idea/ dev-tools/idea/lucene/ dev-tools/idea/lucene/contrib/ant/ dev-tools/idea/lucene/contrib/demo/ dev-tools/idea/luce...

Modified: lucene/dev/branches/bulkpostings/lucene/docs/gettingstarted.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/docs/gettingstarted.html?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/docs/gettingstarted.html (original)
+++ lucene/dev/branches/bulkpostings/lucene/docs/gettingstarted.html Tue Mar 15 21:35:17 2011
@@ -130,7 +130,7 @@ document.write("Last Published: " + docu
 <a href="api/core/index.html">Core</a>
 </div>
 <div class="menuitem">
-<a href="api/demo/index.html">Demo</a>
+<a href="api/test-framework/index.html">Test Framework</a>
 </div>
 <div onclick="SwitchMenu('menu_1.1.3.4', 'skin/')" id="menu_1.1.3.4Title" class="menutitle">Contrib</div>
 <div id="menu_1.1.3.4" class="menuitemgroup">
@@ -147,6 +147,9 @@ document.write("Last Published: " + docu
 <a href="api/contrib-benchmark/index.html">Benchmark</a>
 </div>
 <div class="menuitem">
+<a href="api/contrib-demo/index.html">Demo</a>
+</div>
+<div class="menuitem">
 <a href="api/contrib-highlighter/index.html">Highlighter</a>
 </div>
 <div class="menuitem">
@@ -251,7 +254,7 @@ document.write("Last Published: " + docu
 <div class="section">
 <p>
 This document is intended as a "getting started" guide.  It has three audiences: first-time users
-looking to install Apache Lucene in their application or web server; developers looking to modify or base
+looking to install Apache Lucene in their application; developers looking to modify or base
 the applications they develop on Lucene; and developers looking to become involved in and contribute
 to the development of Lucene.  This document is written in tutorial and walk-through format.  The
 goal is to help you "get started".  It does not go into great depth on some of the conceptual or
@@ -275,25 +278,6 @@ may wish to skip sections.
 	command-line Lucene demo.  This section is intended for developers.</li> 
 <p></p>
 
-	
-<li>
-<a href="demo3.html">About installing and configuring the demo template web
-	application</a>.  While this walk-through assumes Tomcat as your container of choice,
-	there is no reason you can't (provided you have the requisite knowledge) adapt the
-	instructions to your container.  This section is intended for those responsible for the
-	development or deployment of Lucene-based web applications.</li> 
-<p></p>
-
-	
-<li>
-<a href="demo4.html">About the sources used to construct the demo template web
-	application</a>.  Please note the template application is designed to highlight features of
-	Lucene and is <b>not</b> an example of best practices.  (One would hopefully use MVC
-	architecture such as provided by Jakarta Struts and taglibs, but showing you how to do that
-	would be WAY beyond the scope of this guide.)  This section is intended for developers and
-	those wishing to customize the demo template web application to their needs.  </li>
-
-
 </ul>
 </div>
 

Modified: lucene/dev/branches/bulkpostings/lucene/docs/gettingstarted.pdf
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/docs/gettingstarted.pdf?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/docs/gettingstarted.pdf (original)
+++ lucene/dev/branches/bulkpostings/lucene/docs/gettingstarted.pdf Tue Mar 15 21:35:17 2011
@@ -36,10 +36,10 @@ endobj
 >>
 endobj
 10 0 obj
-<< /Length 987 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 977 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gat=*a_oie&A@B[Ln'W\),V0W[&9clJefrb1qp@\d*c#?,)\'Bg$mmc>&4Wg"[re$Q=`Ythj[Vi/+7rKrUtW-Ukui3h(rTCHZD>F#gig$Hh$tXnPZ"U,iYNr%sdo`@%=N682QF9pZ1/4]\A4/Y\q?nj8#M?X9JK2A2kJ[mIl@;[cGIdUGl]qoOb6J_&-;kPN(7$D'6S:^W>^3!1WZ4*_-dbO=!hHL(Q*X3@Hjq_19Bk?oNi1!+8gLB"B]u=hBCA9H(PnCBJ_9!BOot=r#NP<H1U,)5pe7R\H'-+SMGSV'WQc8e$<RBlaT'#0jbO[un6V$R<,o?e^*K7b>3;rIbA"qb!h(#H(FdY!lVrPN'JTA0nhH9:J3Vp]*bm;Bs]'>pV:8UdBDBg2MR"neUFPkk?JXY_Pj<H:B:</G@\;H-3*NdbUp.DN=;getN0Mr[`:A/oZ2l&D=3>*JO9E3r]_2B;gok0%;[f'1S1JXK;/rg>d"gnSo+NW]"%`>6FI53o1_4\n.ToQY]N6s%A=lZo#56hFOZt-nRkF90Gm\1fAP=*CTS+YXPAAU-p<&oMue6,iVoS;9e.=DCM8G!C*U8m/X>js,D'F'qcL\AM=[nr?/)d+Ku=-R<$k3S=c8kcH/Q7DLpj27,+S.Akfbe+1Q,t?%^-NN0%'2Qc,7WBj:D4.G``2K6ooHG)]*P#&!V_B&`oKXfQOO!&knQXb:h=#o^eDX3u5Uh[@UJh))RiPIM@+rXZ;#TQ-Wn(V-$3Co>XZ0o[HJPAb=\!g:nA:TgNW`7'gdb`:!l*R7A"3K@el7fdMMB@Xk]d$Qu^cBB%4lNS&p^"jt&OY]5!0d"H=:BTG_h9BZtZ:j96,$lThP1jUjO2/Me_Sm?7k0+o3*G?)(+\*UcbU.BLEKZ"+#Ac*e;=0BI(1gh]ERMDqB>E1G"hl'QdTG[bJGe$BcY?r"66ja-C?rNNr=g7kVW&`jG;i'IIXL7!o%bBKX$aQ~>
+GatU2>AqtE'RnB3Y^"kClGZ>b$Tp/N9d#OJjUHHR'0!1^`kch%p#"e7g)P;W'1.u<S....@jI7p>0&tC7f!.4+T[;mfP4\rf@!/9`n\H>@e0VCqs`(t>=k@s5AJ.Ao-F.B)f*'(E___acL*Q#o,r%"gQMud<]r:qE8:4jgdi-td4$(SsKV30;Y9LjMmh*Hmt*fD15#K_H"PUoknqse.?FZp[.^X7Lp)ma/aGj]/#Q=K7$@,!O)-=`":J^&&#fPZWamJ[)45WS6~>
 endstream
 endobj
 11 0 obj
@@ -122,24 +122,24 @@ endobj
 xref
 0 19
 0000000000 65535 f 
-0000002768 00000 n 
-0000002833 00000 n 
-0000002925 00000 n 
+0000002758 00000 n 
+0000002823 00000 n 
+0000002915 00000 n 
 0000000015 00000 n 
 0000000071 00000 n 
 0000000579 00000 n 
 0000000699 00000 n 
 0000000724 00000 n 
-0000003048 00000 n 
+0000003038 00000 n 
 0000000859 00000 n 
-0000001938 00000 n 
-0000003111 00000 n 
-0000002046 00000 n 
-0000002212 00000 n 
-0000002325 00000 n 
-0000002435 00000 n 
-0000002543 00000 n 
-0000002659 00000 n 
+0000001928 00000 n 
+0000003101 00000 n 
+0000002036 00000 n 
+0000002202 00000 n 
+0000002315 00000 n 
+0000002425 00000 n 
+0000002533 00000 n 
+0000002649 00000 n 
 trailer
 <<
 /Size 19
@@ -147,5 +147,5 @@ trailer
 /Info 4 0 R
 >>
 startxref
-3162
+3152
 %%EOF

Modified: lucene/dev/branches/bulkpostings/lucene/docs/index.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/docs/index.html?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/docs/index.html (original)
+++ lucene/dev/branches/bulkpostings/lucene/docs/index.html Tue Mar 15 21:35:17 2011
@@ -128,7 +128,7 @@ document.write("Last Published: " + docu
 <a href="api/core/index.html">Core</a>
 </div>
 <div class="menuitem">
-<a href="api/demo/index.html">Demo</a>
+<a href="api/test-framework/index.html">Test Framework</a>
 </div>
 <div onclick="SwitchMenu('menu_1.1.3.4', 'skin/')" id="menu_1.1.3.4Title" class="menutitle">Contrib</div>
 <div id="menu_1.1.3.4" class="menuitemgroup">
@@ -145,6 +145,9 @@ document.write("Last Published: " + docu
 <a href="api/contrib-benchmark/index.html">Benchmark</a>
 </div>
 <div class="menuitem">
+<a href="api/contrib-demo/index.html">Demo</a>
+</div>
+<div class="menuitem">
 <a href="api/contrib-highlighter/index.html">Highlighter</a>
 </div>
 <div class="menuitem">

Modified: lucene/dev/branches/bulkpostings/lucene/docs/linkmap.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/docs/linkmap.html?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/docs/linkmap.html (original)
+++ lucene/dev/branches/bulkpostings/lucene/docs/linkmap.html Tue Mar 15 21:35:17 2011
@@ -128,7 +128,7 @@ document.write("Last Published: " + docu
 <a href="api/core/index.html">Core</a>
 </div>
 <div class="menuitem">
-<a href="api/demo/index.html">Demo</a>
+<a href="api/test-framework/index.html">Test Framework</a>
 </div>
 <div onclick="SwitchMenu('menu_1.1.3.4', 'skin/')" id="menu_1.1.3.4Title" class="menutitle">Contrib</div>
 <div id="menu_1.1.3.4" class="menuitemgroup">
@@ -145,6 +145,9 @@ document.write("Last Published: " + docu
 <a href="api/contrib-benchmark/index.html">Benchmark</a>
 </div>
 <div class="menuitem">
+<a href="api/contrib-demo/index.html">Demo</a>
+</div>
+<div class="menuitem">
 <a href="api/contrib-highlighter/index.html">Highlighter</a>
 </div>
 <div class="menuitem">
@@ -298,7 +301,7 @@ document.write("Last Published: " + docu
 		 
 <ul>
 <li>
-<a href="api/demo/index.html">Demo</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>javadoc-demo</em>
+<a href="api/test-framework/index.html">Test Framework</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>javadoc-test-framework</em>
 </li>
 </ul>
 		 
@@ -331,6 +334,12 @@ document.write("Last Published: " + docu
 <a href="api/contrib-benchmark/index.html">Benchmark</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>javadoc-contrib-benchmark</em>
 </li>
 </ul>
+        
+<ul>
+<li>
+<a href="api/contrib-demo/index.html">Demo</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>javadoc-contrib-demo</em>
+</li>
+</ul>
 		    
 <ul>
 <li>

Modified: lucene/dev/branches/bulkpostings/lucene/docs/linkmap.pdf
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/docs/linkmap.pdf?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/docs/linkmap.pdf (original)
+++ lucene/dev/branches/bulkpostings/lucene/docs/linkmap.pdf Tue Mar 15 21:35:17 2011
@@ -5,10 +5,10 @@
 /Producer (FOP 0.20.5) >>
 endobj
 5 0 obj
-<< /Length 1073 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1086 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau1.;,a5D'SYHA.sTR!As8;ZGdP'-Y+r>hfXH!9-UMQF$5I6FrqfE?Q@p/rii\<,^...@Y>@_e/GBW[#.;<nQZbIk;*6TNePD.3eEVlj/<!b`p.^lb1-CV8s&o4D)r(C?hP7FR.>o>99[6Jof_#)?<2i/*`T)$778ZAbEB'IC[pZfbn,;=I_3!_oQ<?CBfbRW9ggZ8!VK!9%KWG5.D3X\Ftuu:\J0gllc;F5&?7VKLf+d=l:!n06#1p
 UXEUMpT))Lb*`LRL0SE-cd$IpcI^\CD5/&N_od_]'4.!o5:R^,NBReSQ3kI]<?"mdlVnEfOkbnCrAU+-R~>
+Gau1.b>R(K'Sc@-$85g"<Hm1j/nJ2jVX9INl#_TR&;+JFXhaH"Q#$[u:5'P6_@S7Y3WH#;o.*>OMqP!a&n),TZrkSGq3T?6F?;i%eA!D(boEVm&=u:J:%\&8.Tc0pRc?BTG7H7rnpVf)L5CVo.BNEsC:HI,8gR-\*(I];`OT#]&]1*E,KJd\E(E($`B%p2#\NKEf[jTBlj:6h-eVe+[2]BR[<X0rZ=]Q\*f4oO.4Ioi;=uhGgKK21G3!(E.7fYor>K2>`aTN:Bjht_\m+R@2Nst'@^$UH^&R[BORE@k49Yk-2e9Be56U*QJg,`=K0;`'>Pr3#D)_=%$'eTR<&?oJ85nj^/Z\6?@R/^B0W\VEB]#ClrKPLga]+4@$*uLhf:X9BLdC#D4'@L4<]8FU'a'%$=!HD<oQ-k+U1cjts,=LgH?+9Cc<;VDILe<^g;"je:5?^A,:ccbhb8dRHOPt?.l"j4Ylddd;WbC'\Te`m_+oESg76f\\EdUYo4C\]iArHGl/f+LN,U_'cSQFbDMS[@^B=I(V:kB_@.1*PP/LZ;/7bN1^&>#J)u3ahpJYKLL@(;q8FBlNes`cHM%DR@rjP05M'8c?K4&/W"B36&K,g.k10_oA_+/$W@A8P@#kZj3GW@p.k0`Cs:A?R$c12n.6dTTbbr<D,C`'/sF&$"p^EBrt!D8k+YB>k:RB8F-"(i^pm"18;*p4XY6B/8%/uN_g9r<U"f<5j;N4Ea.6A2qfn/:@]I_.6)T9Al&dV88dbD\a=[SDY1]R"h;QAs<Nb_;5'NrYY5d*W^5kDiAp(f@K9F?<dhdu0mFXXu4r/NSRc,>+BU;O=tRlBgbT:YSKa'ZQ6(?6VcTF0D&co-TYi+\GmS-au@Jm:rUNZj3Xs_Pk%en_*3J<n@*=esdl4HajDm`lFW<#a6N?2]9i+TagfMlK6WhT,4iSp))YX.?WJH@M[AbN=]J5eM:=QIa!hsnQhnVcl_-Y*)gI?h@X6
 ?jXa"1?u\\V;E_\BAht:Ljk#ln@>#fbeo?.U*TiD(6tVL`Wg.lG[5E#+D9HL;:^#@ig((M4[+^KsQ?q4[EX@JsrrF8>#*A~>
 endstream
 endobj
 6 0 obj
@@ -20,10 +20,10 @@ endobj
 >>
 endobj
 7 0 obj
-<< /Length 886 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 901 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-GatUr?#SFN'Sc)P'u"K;nGEm=c=L4>8Q."="f[^:Bl\hnZ\ASq;p)kIo0m,M)_&SQ1&-/=+.m'?FtreJ@fR0u^`o3iYaSsMbSL@J4Yu:X+8X%\M`(9Xoh5Y'##gHu1-]&-Wcb2().9D#s.4_C_&ooVDERil8#u)e"t:k,_a!rLQWZ9WZW-,Xb;=,g)ARFmdSNgO4U:(r,BYQ$nX.s:qR4?lB$ko5EFJs*P>`c!po;1iQ&gZr!=XWuF3`M6)$"87!0IY6+/c0eUe!bC'AMFR[<<Brj8fr)`ht@pVFlp,r%an][Q(,=[iRo,5'"*[Y93Kc,'ECZ;u*,L4%c_TPBjhcr$h6sJl4nI?CLU[?%8r>l*dCUDAk=o)R3WMP"uG_:h[9)QMIJf]@\sM8p,,FGFl;[Ptc.Q%oFQqQ/C,kf]b@g7q5G7"u*<A6<e_cd1bptTA;Vg-DTd(4HeH-)Xaci=e)F.QY0I8QK'okqV5UTfS5N.Qq"4I&1YTC]A]7-\j"%Ng:<N[<m1%1/79%a[\r!H/H>WkBLjRl2UD=S<,""f9j*J\'r^DHb;-%Zg?'Ks`RNQubn5+mlQOgLj-&i(`3Tp=A#X-p#>f,"S]rr$c0gP*aJ_V0B8gD![$j?egiKpO;u@D<f%$)_^638D&0RWYSYLj'5q(Y<`L$f$P^-NImKba1"o!j&_DlsJbDeBfO=uIhY:QurZ;Q%InCPWi>J2hF&eUU;LbmL5AUkn3+BK\S4A9Y9LFGF+A-S)%$3C_F*jjPWb4[3rARa.OCsD7Ta*Q'9bSUb9#)$V)N,,E)Cid\XeZ5kF7%*d^_Jg;'K`!H+]W*TofuUB>ca-12A_nAoA\3%5bL7O+VBneM<8L%s<p%\U=%h3-mQYIufZs~>
+GatUr>>O!-(l%MV.sqX>omDR*k7Z-&Bk#M`OdIu&aeV\R8<Yr...@I>FFS&]*<b8s4rL9PLrH_3e\.,ctS0)$";FnN\No`:KNTlPA4YE(b4R\k<C>BpIsJ\$rT]6LH]HR>DuEg!Qb?'E[u8Xj6;r`@(Nd8+#@gt7Q?h!5r?Z^i])0__-<%fM6PK^T!3(W=h?k-^taQO#l"rWlcGqn5aN/=i!d#6(h7Yb>O+GlV_hU(8l&63ELt%UkYiN@O"jB7&%9oi+87*+<U`iWB.[c*2'\Y9r)n75e-,8UCZIffIr++Z>0KLW"a3O(FJ6L2\Q52CRu_<nO%b2,7-C3,cCSfXg16NE#dkn3X8K+]MS5%uA25LnAcWS".'SuW)#8-905_gXP>TgG&*7]!L(2c*,)TBij[GVTjR`RRQ^cJ3gFtGoo<8fJ6`">_DYU*9Y(g%Q]@8UbC,J0#!d^GRHg8:>ZcfgF9oA1CoA&d:Q#r%o0$DA0!gVS[=iR:.e,5uNe>%Y%;ie03YoXQ15<dOZPW6*[24!f:GRTj!K?^_29Qm:?ACR=71WH`A)pL)i`Wk2].=-n9f@?2`Tp2Um+@&34R\PO$5q(Zg*\d,a:R4lR\g-"c'\k"3#c$Ht,Ic6m04/2c^XCI9Mb<A1iNN5s=$Ba"!YLo+LbmN97=ZLh+B'DQ4j7f%(G>,c14r(#"eGf"pR5l:D>TOB2DM4=aC]YO@@_Tt2M^>'$jami(fsUZl1UK5lW7BWM;m<_$,^UJ&9?OHIoU?)Z^!g8?DaD[aK2_R8GC4u(=O=J5)\GZ.)#4IXN[74Y#_bi]DlJMm)/~>
 endstream
 endobj
 8 0 obj
@@ -87,19 +87,19 @@ endobj
 xref
 0 14
 0000000000 65535 f 
-0000002982 00000 n 
-0000003046 00000 n 
-0000003096 00000 n 
+0000003010 00000 n 
+0000003074 00000 n 
+0000003124 00000 n 
 0000000015 00000 n 
 0000000071 00000 n 
-0000001236 00000 n 
-0000001342 00000 n 
-0000002319 00000 n 
-0000002425 00000 n 
-0000002537 00000 n 
-0000002647 00000 n 
-0000002758 00000 n 
-0000002866 00000 n 
+0000001249 00000 n 
+0000001355 00000 n 
+0000002347 00000 n 
+0000002453 00000 n 
+0000002565 00000 n 
+0000002675 00000 n 
+0000002786 00000 n 
+0000002894 00000 n 
 trailer
 <<
 /Size 14
@@ -107,5 +107,5 @@ trailer
 /Info 4 0 R
 >>
 startxref
-3218
+3246
 %%EOF

Modified: lucene/dev/branches/bulkpostings/lucene/docs/lucene-contrib/index.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/docs/lucene-contrib/index.html?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/docs/lucene-contrib/index.html (original)
+++ lucene/dev/branches/bulkpostings/lucene/docs/lucene-contrib/index.html Tue Mar 15 21:35:17 2011
@@ -130,7 +130,7 @@ document.write("Last Published: " + docu
 <a href="../api/core/index.html">Core</a>
 </div>
 <div class="menuitem">
-<a href="../api/demo/index.html">Demo</a>
+<a href="../api/test-framework/index.html">Test Framework</a>
 </div>
 <div onclick="SwitchMenu('menu_1.1.3.4', '../skin/')" id="menu_1.1.3.4Title" class="menutitle">Contrib</div>
 <div id="menu_1.1.3.4" class="menuitemgroup">
@@ -147,6 +147,9 @@ document.write("Last Published: " + docu
 <a href="../api/contrib-benchmark/index.html">Benchmark</a>
 </div>
 <div class="menuitem">
+<a href="../api/contrib-demo/index.html">Demo</a>
+</div>
+<div class="menuitem">
 <a href="../api/contrib-highlighter/index.html">Highlighter</a>
 </div>
 <div class="menuitem">
@@ -252,6 +255,9 @@ document.write("Last Published: " + docu
 <a href="#benchmark">benchmark</a>
 </li>
 <li>
+<a href="#demo">demo</a>
+</li>
+<li>
 <a href="#db">db</a>
 </li>
 <li>
@@ -354,72 +360,78 @@ document.write("Last Published: " + docu
 <p>The benchmark contribution contains tools for benchmarking Lucene using standard, freely available corpora.</p>
 <p>See <a href="../api/contrib-benchmark/index.html">benchmark javadoc</a>
 </p>
-<a name="N10053"></a><a name="db"></a>
+<a name="N10053"></a><a name="demo"></a>
+<h3 class="boxed">demo</h3>
+<p>The demo contrib contains the Lucene demo: IndexFiles and SearchFiles, described under
+                   <a href="../gettingstarted.html">Getting Started</a>.</p>
+<p>See <a href="../api/contrib-demo/index.html">demo javadoc</a>
+</p>
+<a name="N10066"></a><a name="db"></a>
 <h3 class="boxed">db</h3>
 <p>Provides integration with Berkley DB.</p>
 <p>See <a href="../api/contrib-db/index.html">db javadoc</a>
 </p>
-<a name="N10062"></a><a name="highlighter"></a>
+<a name="N10075"></a><a name="highlighter"></a>
 <h3 class="boxed">highlighter</h3>
 <p>A set of classes for highlighting matching terms in search results.</p>
 <p>See <a href="../api/contrib-highlighter/index.html">highlighter javadoc</a>
 </p>
-<a name="N10071"></a><a name="instantiated"></a>
+<a name="N10084"></a><a name="instantiated"></a>
 <h3 class="boxed">instantiated</h3>
 <p>RAM-based index that enables much faster searching than RAMDirectory in certain situations.</p>
 <p>See <a href="../api/contrib-instantiated/index.html">instantiated javadoc</a>
 </p>
-<a name="N10080"></a><a name="lucli"></a>
+<a name="N10093"></a><a name="lucli"></a>
 <h3 class="boxed">lucli</h3>
 <p>An application that allows Lucene index manipulation from the command-line.</p>
 <p>See <a href="../api/contrib-lucli/index.html">lucli javadoc</a>
 </p>
-<a name="N1008F"></a><a name="memory"></a>
+<a name="N100A2"></a><a name="memory"></a>
 <h3 class="boxed">memory</h3>
 <p>High-performance single-document main memory index.</p>
 <p>See <a href="../api/contrib-memory/index.html">memory javadoc</a>
 </p>
-<a name="N1009E"></a><a name="misc"></a>
+<a name="N100B1"></a><a name="misc"></a>
 <h3 class="boxed">misc</h3>
 <p>A variety of miscellaneous files, including QueryParsers, and other alternate Lucene class implementations and tools.</p>
 <p>See <a href="../api/contrib-misc/index.html">misc javadoc</a>
 </p>
-<a name="N100AD"></a><a name="queryparser"></a>
+<a name="N100C0"></a><a name="queryparser"></a>
 <h3 class="boxed">queryparser</h3>
 <p>A new Lucene query parser implementation, which matches the syntax of the core QueryParser but offers a more modular architecture to enable customization.</p>
 <p>See <a href="../api/contrib-queryparser/index.html">queryparser javadoc</a>
 </p>
-<a name="N100BC"></a><a name="queries"></a>
+<a name="N100CF"></a><a name="queries"></a>
 <h3 class="boxed">queries</h3>
 <p>Additional queries for Lucene.</p>
 <p>See <a href="../api/contrib-queries/index.html">queries javadoc</a>
 </p>
-<a name="N100CB"></a><a name="remote"></a>
+<a name="N100DE"></a><a name="remote"></a>
 <h3 class="boxed">remote</h3>
 <p>Classes to help use Lucene with RMI.</p>
 <p>See <a href="../api/contrib-remote/index.html">remote javadoc</a>
 </p>
-<a name="N100DA"></a><a name="spatial"></a>
+<a name="N100ED"></a><a name="spatial"></a>
 <h3 class="boxed">spatial</h3>
 <p>Classes to help with efficient distance based sorting.</p>
 <p>See <a href="../api/contrib-spatial/index.html">spatial javadoc</a>
 </p>
-<a name="N100E9"></a><a name="spellchecker"></a>
+<a name="N100FC"></a><a name="spellchecker"></a>
 <h3 class="boxed">spellchecker</h3>
 <p>Provides tools for spellchecking and suggestions with Lucene.</p>
 <p>See <a href="../api/contrib-spellchecker/index.html">spellchecker javadoc</a>
 </p>
-<a name="N100F8"></a><a name="swing"></a>
+<a name="N1010B"></a><a name="swing"></a>
 <h3 class="boxed">swing</h3>
 <p>Swing components designed to integrate with Lucene.</p>
 <p>See <a href="../api/contrib-swing/index.html">swing javadoc</a>
 </p>
-<a name="N10107"></a><a name="wordnet"></a>
+<a name="N1011A"></a><a name="wordnet"></a>
 <h3 class="boxed">wordnet</h3>
 <p>Tools to help utilize wordnet synonyms with Lucene</p>
 <p>See <a href="../api/contrib-wordnet/index.html">wordnet javadoc</a>
 </p>
-<a name="N10116"></a><a name="xml-query-parser"></a>
+<a name="N10129"></a><a name="xml-query-parser"></a>
 <h3 class="boxed">xml-query-parser</h3>
 <p>A QueryParser that can read queries written in an XML format.</p>
 <p>See <a href="../api/contrib-wordnet/index.html">xml-query-parser javadoc</a>

Modified: lucene/dev/branches/bulkpostings/lucene/docs/lucene-contrib/index.pdf
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/docs/lucene-contrib/index.pdf?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/docs/lucene-contrib/index.pdf (original)
+++ lucene/dev/branches/bulkpostings/lucene/docs/lucene-contrib/index.pdf Tue Mar 15 21:35:17 2011
@@ -5,10 +5,10 @@
 /Producer (FOP 0.20.5) >>
 endobj
 5 0 obj
-<< /Length 883 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 908 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!$G966RV&:j6I$6>[i<BUnSA!:U:SR+A=f(OX!*&GFh!3YX;hj'_)[6"P>W?RDD(>>&K[+a&&pK@"E;%aI=7^>b(bYJg)ne?&[i58-$Sjaft1.k*G,Ms:ZpNa$oG@W/^"POVu%Y_&_IJN?/LSjLoEcjm$P3au`*#&<4o#5Pt<g:ek4C"2U.bfY49oEWDrYNqPY5<,#:D(l)qr:A;%MbmMI.!&*BlPG9eZlJ+3"J"\fGa_g`Onf0V(!QjLf&7Mk=S>rhU(L8]T?)uaQI^7&+jdXT!1$G/8hU=)n<jD2j.P4]%HHAp=Uh,0f2Pd",CSYP6"c\!b;&6`s$lsN1lNHJK$pK1iS6!gdllu5&DhFp:BoX!JX_e:+`B3,Ndu'<R]/_^9"pf*4sFA^%T+Q6[iV_Z^=+2!a.A)N9%$,;3gT\M&T[:IVZcp=l<n9*l-fME$W3I];@`:-O8dI#\>fJR6mSuR3kDo]<Ws"o+'8/H*p=T'ZncpCb5U,d-YP>\"2,AAiFEYhp<!:Ko9H2N?T_S)(?E`;KpuW%F?O@_N]=XL@c*iAE,,,KglD$3-;@]"1%tE_]4k/36_k7V2Jc04<:cP8>4f$Y[(8cU#/32HtkXs\2_LKF#$CJ'Y:u\.QD)Vci.2'Qs%H#JHb,!/qWW`ABY$`L$i'o:]?>irAbeoGm6)NPUM?IB4D\q.3+h#?#/?<XBXL`5X(#kfQ]/`OcdNL?+%&oe^DoqAMR&,2K7Yh5@qZh^%nm6&=g]rL<RN+qVg6FBf4QH?\<]H@j6YQ@5JR9W6g5)=,Nl;+t7?UYJ^srrm[BHL:[cf+V],X_-#c5)89Ce^2<\sD#.YuU*l#HTjC*>ChejWWle?.fH$u-R.am59ca'PBc*"E~>
+Gb!$G9lldX&;KZO$6>[i<IGtja!T7T3k]XXXmH.!3G*lZ!F.S`^+5>]3h6>d<5IV"ATf@@XnU@<[qY?j?4miJ7abSXlpi*NndocWi5J8sJ(#R9;TC%GORK62a"6,;)mU5V%/3e0::[?#Hi<D;GBMFn`TDpQ,jAqY3?nB4jGVtrUaVS@+"kerV<^J$>H<'/Ia=]L;g%KST-Be2p;`T**@ah%W:,dWC[oEu\RXrfTHA1sE%Uqd0Dd.PQ1bR,8kbu63EK*VnVU'hiJ")m_EP"]J"V:4o9f4/Mn$<lCu?*#grOqSWdK<;RRa"B2UF!X%NHga`WNH8"ig7?F/[tbUp#bu#eH`8k\qR]fl'#cn_;6-/+Lb6kIEGh"c]O-DIgL8*qgnm44AGF!6Znu-!S/)$D_3YSf-2t<SN(n'j51XSs)4r4gS8/CffbM3LXSMp>m_VMg+_.\$:ZXF5V?V3)`Amid#KRIfM?AT"U<iZVHga[#?4TA]ZJX[QbICm[\Qp^+-00bgEA"S5"%EQ5_hHSP8X&baR+\PWA-.g0W/N@ONm,75eG73F_&WM$qdY%lQ[#;%F+E%d0OZX;lqQ:Y0(d)EBX9d%,FmbQ;0Y!kj+%2E.Ccn`c4\0dDJIR)*fCHA?s7m`!ZWlH2uEpiK5BWNeg;1h@!*bP]ap7b]W?kR(^r.?T3V(Lmpl3OItDHLN"eQd>McHkoOT+q^<I`Z-gU37lE`1;<LKf;>m)H4ig%F>;p>Oi-WT\TY%(g=((R.o4h'3$)cuV88?WmW%DBS4,8d>07k.5e%MB%+tekK3N[r,_gSQ1_rrecm]Q.MC)Mh"=fTOik,'^gt6J`Gl7/#-pG'B@sVsfpdjZ:&_"48f:B5PrGl8;W\#W0>uBZ`Q=Iglh4h?/C&_bQF@?-2@FDsn~>
 endstream
 endobj
 6 0 obj
@@ -39,6 +39,7 @@ endobj
 36 0 R
 38 0 R
 40 0 R
+42 0 R
 ]
 endobj
 8 0 obj
@@ -74,7 +75,7 @@ endobj
 14 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 505.066 135.5 493.066 ]
+/Rect [ 108.0 505.066 150.164 493.066 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 15 0 R
@@ -84,7 +85,7 @@ endobj
 16 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 486.866 176.168 474.866 ]
+/Rect [ 108.0 486.866 135.5 474.866 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 17 0 R
@@ -94,7 +95,7 @@ endobj
 18 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 468.666 178.832 456.666 ]
+/Rect [ 108.0 468.666 176.168 456.666 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 19 0 R
@@ -104,7 +105,7 @@ endobj
 20 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 450.466 144.836 438.466 ]
+/Rect [ 108.0 450.466 178.832 438.466 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 21 0 R
@@ -114,7 +115,7 @@ endobj
 22 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 432.266 163.496 420.266 ]
+/Rect [ 108.0 432.266 144.836 420.266 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 23 0 R
@@ -124,7 +125,7 @@ endobj
 24 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 414.066 146.168 402.066 ]
+/Rect [ 108.0 414.066 163.496 402.066 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 25 0 R
@@ -134,7 +135,7 @@ endobj
 26 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 395.866 180.14 383.866 ]
+/Rect [ 108.0 395.866 146.168 383.866 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 27 0 R
@@ -144,7 +145,7 @@ endobj
 28 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 377.666 163.156 365.666 ]
+/Rect [ 108.0 377.666 185.14 365.666 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 29 0 R
@@ -154,7 +155,7 @@ endobj
 30 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 359.466 161.824 347.466 ]
+/Rect [ 108.0 359.466 163.156 347.466 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 31 0 R
@@ -164,7 +165,7 @@ endobj
 32 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 341.266 159.832 329.266 ]
+/Rect [ 108.0 341.266 161.824 329.266 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 33 0 R
@@ -174,7 +175,7 @@ endobj
 34 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 323.066 188.476 311.066 ]
+/Rect [ 108.0 323.066 159.832 311.066 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 35 0 R
@@ -184,7 +185,7 @@ endobj
 36 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 304.866 157.168 292.866 ]
+/Rect [ 108.0 304.866 188.476 292.866 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 37 0 R
@@ -194,7 +195,7 @@ endobj
 38 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 286.666 167.824 274.666 ]
+/Rect [ 108.0 286.666 157.168 274.666 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 39 0 R
@@ -204,7 +205,7 @@ endobj
 40 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 108.0 268.466 211.804 256.466 ]
+/Rect [ 108.0 268.466 167.824 256.466 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A 41 0 R
@@ -212,214 +213,247 @@ endobj
 >>
 endobj
 42 0 obj
-<< /Length 1840 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 250.266 211.804 238.266 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 43 0 R
+/H /I
+>>
+endobj
+44 0 obj
+<< /Length 1886 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gatm<gMZ%0&:O:S#lBhd#q]'Lm8K0BdOs7mG2j>dRQf(2D/1_]/k*h&hfiVeL:60]korB/as-"lk0+7;-_oG<khhLs_C2c3X8I&g/O)B[$8"oqXl1A:h-6Yq-FW#_0)Tq,o(sa+#^'BF$#;TuI<7UiNUHq,Q7kpD,MSZJhurhM<jgJ#i-!qGXK91_-onahg$Y66?T5727CU!n\Q7teh"o'[I'0iR]>O&P*?:E!^>EV_7NnI3A>nHiPZ;Ic.POKMT[I5R&AouFk"iWoXd/f:@bj3*=WtCW%/TNO0@91Df<&#q@a/D&nHOW8#ENLRWE)>s0AWsG0"3hRJ]-g$Pb#-SC[I4fg=gt;%m3Xbo(hhR![#=BN@>J_f)gf#9"dL%,kan)<hIB0$+sHD;QYYi:<\oN.>`9^)5pNKHt]o(H,QkfhC`>Y+Ji;CFM?+(,$%9l!eM&#0qa5,*/e2Dp7I9a=;u(rJ-Ig'e@ti%MaL+Rg0tJK%gQ9\DZ51Wmq=$V>Lkq=0C+$G2N+!I1:^-N3Vr\c/MO\H]ghf@nS=mbg60cNnZdO_Hq4)*g[chu]kZ"@@p]'3+WjNONbUpK#_-l[b)Kh"WfZi(>j3'kbFN-$3gFtV?Id7+J4i\cbit;b#)bg18<#_oWbiq&KbKTh.<b[O5gW7th'=RUjU`[k&G(>&eg@[T;oLPc1?XHWe0`f39(\VB]"]Zsp*>.:/r@;u/`OT7Qs>P@d`C#sf;4'*#/BF=ORB[9?k_!Oc8LC82`P<'@pTZQkt<9\lk8QD@[M"E8tZpM69G?A5q$b:N'3A9f.r,j$QQd9lOn$ua]s^<(#Z4GfYD:oq;@ct7^*W;@-&"=R#>&\"],9'_,I/l$;,bMp-j"Q74=_HRuA;_HdC1UJKiqN_dg_&RVT0(c96pYCp:>ibLS-;@*;PJR.9/sSYfP)nlo6I<b<<ncO/('NuPL;][2!'EBN*TbEQsbqEbamk2U9Uk2gg6DLC9=EJ&s
 0Sg21p;Z]nGa&'B%clKZWf-^D=1>[RW'XS)iQ14Kc[o]2N]-[:k=Yrc-UL7QV!:Lqj?0f25\]7aj=q4(+TJe<^[_L&CX_]1M0b>_(,g\kdQXV)N$\oP3[b4NInf*eMMM9hr#Sk!#2RoL>?LWas/&"E@GlD`@cFob7KO&RVY]:<6S"Hmugtt:(^a!1THk3Y^;3ElcliH]+O[5i00-ZDu[-@OUgn7S*Sk7qoM"kt8)Ck[UM!7O5AW^`,OCNPhlT:]eVK,Bp`D_f-B6Vpo(UKQa`__c:3sD&XFZVN/GjP@#_m0AsWne,aj^d^<qr>!2e%I`b+]/e/UG<mVH*.AW@u'p!VG92i1ZH,[.X#W9#?q#nap8S4:kUO%`_&Le)K&;JBS;sG5Pc8A.k^4A5KCXa6BT@a#KDDl'F]+ZNsC:l!P6f.*Xp"t$4Z6/`RSu_.a3$kf7Lg0M#Wd60ZPNiGC/a-OMnk9`-c=V95#c\@Xq,*@uXW.5H`A9ih)oKaV1=ee,kn`A6G@JiXYI:)Nu;RBu['=d5\/6<4j#''W1`"fkXum`uRAc3>D>4kT,LRrNaOQ%<*9iS7MDHMg>D\J8T.B$kW.KaACJ70ZI)/^+/p]UPhtg[$W@]@`7WnYD$.l!qGZUlYb-[<X=))KY$)s0^u1E9W'GAq-uq+jTtr)&blcEW-rd`g'^&fJE;JoAZ$Q1^oP.Y'?EgccE)!qh,i&-opjC6U/K`LbHH'?eB2:B9PRYS"W4HDL</d(PBnM`4=bNi@+pPWl^-ErddFbef-LN+F=UtXI^c=U\QU+gmFDegVRQ4t<^"!W)b@1gAcutOVNtuE?"2?"!DUq)85LK,%q]]VmJ~>
+Gatm<gM...@9>aJhk:ZbPSWrR'j`Wfb=cNiVi1kMjF"Y5q\^g+fECS1f8KBGeM23e$Em#0p+Mbka[Mi@C&pR\?5!_$>o_dg`%_i<:rk5dquB=,)hbLS]K@*;QEqsiYmSYoWEkI7`tXS[!b37D>=+#dqUH"kLbC-(1JX-@RBqGIm(*iI[dc-($uh=OX@`\eP
 2E/kJS:C0]d+(O]T89a,MY>+dZA@r#8-tr@g<5R...@J>"0U.._)U%Q%0g-B1)sFn&dS5FU'nXJfHX)A0)#.,3@A6LrF5<uaPfEpbm_F%NV<t&$f3T<(Y:M=k/%t>#"C<*=RfJ4/(`,m`l+WT-W5h5:7A[H#QG:rj?7X>fAl?6m!C53B@,UG?>cCdkf!@[Z%&V9?[!C>1HL9!.a'KUC4kd"Xg\/6ZNM($;S@)SYbD"X#'4gds<^QS+a[$&HX!Xo_d9X94CB4n!;\qF_h1+73I:E~>
 endstream
 endobj
-43 0 obj
+45 0 obj
 << /Type /Page
 /Parent 1 0 R
 /MediaBox [ 0 0 612 792 ]
 /Resources 3 0 R
-/Contents 42 0 R
+/Contents 44 0 R
 >>
 endobj
-44 0 obj
-<< /Length 1340 /Filter [ /ASCII85Decode /FlateDecode ]
+46 0 obj
+<< /Length 1328 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau0Cfrj'f&:O:SkV3*QQE-=l,]-En/WdqiD'*GZ[T.!\.-]UDIXO_LBb#P;jLV9uGTk>j*6pQ#*5110Ibq0?Y#odrpP2a<$'...@OsE-H1VZ23>b?t/+qC<k;8cX/gsW8I8pt:9%b$.ge6rbFSg?lt\Ef^CJ=PpgrdT(ooGL6s+"h-@^sI(b@W%&]?Y5#nO[@l-S9^D5+gPa)nUn9(ktlp"I67KaAZ9Ioo_;H>TMkf?H-+6Y(DPn*]s1?T[;CoB.j;fl-V-L\1E7ll%E3?JaiFBgNdmWM_VFC5l;X3<=&[XUnD6#s3FC0Z/4en]$cOq8F$D*n$!HH%ICYTPJ>Mf\V@8=GlbLGQA7AD7S3n6cns_K?ZZ-mJdo:0*QT6&Upn:&ud8E4NP0W*
 m^^\-4p>LHDW93I\D"):Je5p5=RQ1h]/0iR`%>ibBDYp)`h1O(:dLadQK-0L=<l1jYg6`BHPTDLDRd86)613L1WJZ2F!6kk<,q7d_Hm%?4%/84*;^k+qhl^H9Th8nEl'TjK+W%"]'JYf98=j+i/GR"%Gm'M+3D9DWj/sr)F?YO+8P#/c*38fh[Jo$7G>6oH@N36!J5.5$65#XC6^KuEgcLI2(*bZ'Bl\t';'/,;ip:8:+JVk+JInD<X5]aS)5M?iX(]#nq>$08?#t=t_c+dh?TNl8:Tg',ECs_*g70BD%T&t@nX!kF4_fmehD]krEtZ0RQ),R]^0<EPTZRMG,<g)H!j,b*SH~>
+Gau1.9lo&I&;KZM'g*g!'nT3_4PEAt:8aY&'&D7]+:=:aJtrI2<rDEu,Xi<,abc:^`Zn+V$1),n(Q692C@UV)nSLRd*IL%'&r^cDa"dMTUA_b>1dOHkaI-_Tpp@R2i;cI]p"k/l+<j/2_.pTth&m,U,jGUAMIOf)<?D,3k)1s4@<a`SRuPP5Z1X0,d[N"?)h!]H^\84GU_8Aae:)I*g2DNU'h*!Vbs2.(0flkh-rP]@KHi$Mi3\FKl^\M+VA)TgH\VpeaRaZD],/Hl$qMuUF.=F<';<bi-AVuV)gc\g;mnF2BJ:rOZZE_'b$s^"B(^Uhh&H*l2:#dQLO4.619`#<7V&_;E`h4^Jqu-j@piWh6,3IMP(A8T3:+!-hSQ0KDAJ$.">o)h!YJD>9BrY9N@$/SO,\0Ar_BSu.\GD&F;(6X`GY%eFe.rQ*`tuTE;(r"Q[6H<W>\uBdu^h&n_efq3=+=*BQGKSB@kVp&dI??TH,7A(fd\r3n(Libi7c)JeTTqPU96))VeT9Li^t5rI"A&EilCnb%Q-3^3c7@g67(:o\00*o>V$CeQ!1J*b:(TY<C<As$PpB>*nZ&=pq<L[;J'4U?A$i3io."lDD`Cdk]mDipcGT+HnM12q/.gh)XJ@]hVZr+cW`m-dpJ#D,QkJ$A9jgLf2je""#acaltXlo2+Yg_.Mq#C(Bp1XY#U*4T9"l;j^^-jgrMCNP1^"lcS!Ai/LOU*6)f\2ClusB?&n<+.Nj$T42q)^^OrbWIEk%AHW2IGa4%CLN9*E(NXs1W.Be@q9hYS`_NGUDic*.#NHq\6XWhG?579\CR,O,-9"B\6hC'8i+##s&e0PB7g?R+R`d_jIl:7s=L5N/%HS4Gm?p`/e&eV3Q47C3U5E9HS1,1DWVFG8r1mV1C+i!SH/(GiXOW"R)uim_+B/="P=]Vt$'OhV`jk2%m4./o2dqJeQ='eUItpCG0-FECDt:%pQrF'e3?D4fjTfR)AbB2
 Q`d1pVFulC^"=hr1Z;=::R+mIS83!_A[]^J\M4pk@p`Lo84Z.Y';&hV2Z_E%M!6$cT)j[gSP0bb8ZBDI/U+4B,*b+<YfGm"8M^b=^C$3"Pr/./Jqtu$h8E\MZ9^mI6eJEMgR8[5E4jZ_cVRp*0KTHjn8hYAnSbD(ekp/$]rW:DOb9+Fe^+=#c"]qAj[b""a$;WZmPdYIJ;/?IOACAMO,:-,<53cEeN-PdV\E=.WUCt_8nV0UXPpEVjg9[?AmPaOW_m=,/h/5F,#4-7XaOm4(a(&n-MG2Xk,1X*9PhZ&5S_*I02T;Q2N4`TMNfD>-jg>P2jiM>c(qBSG&+Y],~>
 endstream
 endobj
-45 0 obj
+47 0 obj
 << /Type /Page
 /Parent 1 0 R
 /MediaBox [ 0 0 612 792 ]
 /Resources 3 0 R
-/Contents 44 0 R
+/Contents 46 0 R
 >>
 endobj
-46 0 obj
-<< /Length 1108 /Filter [ /ASCII85Decode /FlateDecode ]
+48 0 obj
+<< /Length 1231 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau1.:NP5L(rl#l$6@k'Wr>XTVO^GZ47,_qE9L!-#6bL1Xg+iW_Ic%2b$\FO![OAj$j68>QJP-Xc[$no04o\bB"qsq'`S&NQ6D'7&AioPhHeHqPRq=.)?]D>?YAi"mm&"RmXBB)!@If$`G1,;SWJ>0E9tXP'Sq=Z#5i^eQ06`O]$f\E0IMXlhYc5u`gSeBXQh,8T6Eq,)>G!F"VuSO)OY'UL66D6\M3+%qHi@XZ6/0^3s8Q\&-^lK_moU+-rU+&"ZZPB[u[3V"(N_`5;7_Ge&2h)0KhI[C.9%\9TGRHG9$mMNS2h,`#99j4JRuoq#Ual7]m<@*$6tc.!=:a`je'7Y>)P:dB5?f.>2qah)[s]^3hsJLiWa++a!j"R-O#-iA?0H\Fjl/S7MWMCa;Cm6L@f8gHE13&.o=J`[2os&dkgk.\`/Z=fq&=R`^>]gpTsZbK/m/h3pHp:u+*8'dr6#,p4.+-1jYG?4S.Lj[KA#?]L1eh[t\W+&26mZ<XQWns=(911X'E_=1EYN,hH+5N]Xnl?f"u&F8mlM$pUOMU8H*(t>]:9\YiXp)O)?Q'-:h%H8G&N%K<<Shss6*^#u@<Qpd_3q?f9ci(\a1E`Y2&1]UQ,S^I)XKU![qZP$HhJDN#0<ke7a)$Y`?<$HH[?WO:UYXVWH%?lFI]jTR,h,^pYCOe41)[`oJBRCpEeMCV=So\O/*"q8653&7VrAp"PL@0M0@EjD@<6Lu[/ZR.l:-[RWk*N/4L<a:@3`YX4G0@2gQNo_5<-M8D[2mENqiR9Y^fJ:kl08"oBo0B0]2/m]hgeI5EQOH-8WRQ.b3/;X-!'kQh.(M3C7$;aMF^Ui_tPkQJn#pi4cJAR4;O5EO?8-hnOP69(bZcP7&(;I]jW2-`!@qFrL1gCBB_Z.<;5beOg/k4XNl!a679=I?EqenON7G$5+H&`hrQQ2ghPSf@[^rH1UroPOXD>3BT8,'&JaT%HR"gRG>u\MLqp.gT/!
 77@K9+e&83bK)cXKIP2%X'/8T''-)+ZSdYkSHMc(A@XUKn<Ti.5_JtA;66\gUhOHqER<==(l]p5j->L)oG?(fXh%W?7ata*Tghd`E:\!<&0R3=6D/BF"~>
+Gau1.9lJcG&;KZQ'g/p[Yl#37@iB0@?*llNpeY@B&%"aZC1YeXk]kQ`^Q^:+Ugk]/OMJ*&O[RLaI5Jjha8,(_q<Z]...@aI>XmH6Ym!:EYd_WQ=H#aB^bW'.?YM%Oan&b;*]2jK7RB"-,63W5@U^c,
 2KseK!dke)6rqQAWcV^[u-p+6gLKahUHSU4"[/6X5#nTj59_sFUhC;T,gKB2[WCTS46]J"H?Fo+8<44Cpd0&A25H*]_4#&!0JqUU20*eKHEL>O87jS=Q)f6\YSQa#3=KkJX%]J/M7YL(0r#6X<*2X#Im8cmV%fF=_+7!CDmaqfu.eaJ4fNSKP`*;h>SB_DYlKil([!PdXB5Ytsb(ge=EEH@iU\!:E[WYHkK?g1BmXK/l@\<~>
 endstream
 endobj
-47 0 obj
+49 0 obj
 << /Type /Page
 /Parent 1 0 R
 /MediaBox [ 0 0 612 792 ]
 /Resources 3 0 R
-/Contents 46 0 R
+/Contents 48 0 R
 >>
 endobj
-49 0 obj
-<<
- /Title (\376\377\0\61\0\40\0\114\0\165\0\143\0\145\0\156\0\145\0\40\0\103\0\157\0\156\0\164\0\162\0\151\0\142)
- /Parent 48 0 R
- /First 50 0 R
- /Last 65 0 R
- /Count -16
- /A 9 0 R
->> endobj
 50 0 obj
-<<
- /Title (\376\377\0\61\0\56\0\61\0\40\0\141\0\156\0\164)
- /Parent 49 0 R
- /Next 51 0 R
- /A 11 0 R
->> endobj
+<< /Length 380 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat%]5u5B@'Z]ZiMKeCsI0(0tO)Aqa`e.m:W<_#&DJ!ZCekPo+V6m+:@U]asn;$c;O8!.UP5CI`$%p[N#EhoZ+Jj0q,hd[f)02qcf&VP/ru6Bm'Yq5j8..b4&p8gmQRFgc)F:rif3i16bb]ZQi+p(8O(Vt+iBc4^Z,=hA^?E5TB(-;pUU0+pA(8(cS/&Y)`fn^Dm\$nG2cg>",rl*(kKHoSU[YI;79qco]C%1r$uJMK*hs(-kS[4XU.%oV+CMsu0o7Sbr=bfG3@uRI%5QZ/_jIJqN$pG)0TcFraE>ZeX$qHHg24B7]O0GLHfK\eMGku0Q1eb$(m4B8<>WoX[\K$tIBIVHD!MEuBtN1DI-oBR)u"guPN)Z2)a$`QlM~>
+endstream
+endobj
 51 0 obj
-<<
- /Title (\376\377\0\61\0\56\0\62\0\40\0\142\0\145\0\156\0\143\0\150\0\155\0\141\0\162\0\153)
- /Parent 49 0 R
- /Prev 50 0 R
- /Next 52 0 R
- /A 13 0 R
->> endobj
-52 0 obj
-<<
- /Title (\376\377\0\61\0\56\0\63\0\40\0\144\0\142)
- /Parent 49 0 R
- /Prev 51 0 R
- /Next 53 0 R
- /A 15 0 R
->> endobj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 50 0 R
+>>
+endobj
 53 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\64\0\40\0\150\0\151\0\147\0\150\0\154\0\151\0\147\0\150\0\164\0\145\0\162)
- /Parent 49 0 R
- /Prev 52 0 R
- /Next 54 0 R
- /A 17 0 R
+ /Title (\376\377\0\61\0\40\0\114\0\165\0\143\0\145\0\156\0\145\0\40\0\103\0\157\0\156\0\164\0\162\0\151\0\142)
+ /Parent 52 0 R
+ /First 54 0 R
+ /Last 70 0 R
+ /Count -17
+ /A 9 0 R
 >> endobj
 54 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\65\0\40\0\151\0\156\0\163\0\164\0\141\0\156\0\164\0\151\0\141\0\164\0\145\0\144)
- /Parent 49 0 R
- /Prev 53 0 R
+ /Title (\376\377\0\61\0\56\0\61\0\40\0\141\0\156\0\164)
+ /Parent 53 0 R
  /Next 55 0 R
- /A 19 0 R
+ /A 11 0 R
 >> endobj
 55 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\66\0\40\0\154\0\165\0\143\0\154\0\151)
- /Parent 49 0 R
+ /Title (\376\377\0\61\0\56\0\62\0\40\0\142\0\145\0\156\0\143\0\150\0\155\0\141\0\162\0\153)
+ /Parent 53 0 R
  /Prev 54 0 R
  /Next 56 0 R
- /A 21 0 R
+ /A 13 0 R
 >> endobj
 56 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\67\0\40\0\155\0\145\0\155\0\157\0\162\0\171)
- /Parent 49 0 R
+ /Title (\376\377\0\61\0\56\0\63\0\40\0\144\0\145\0\155\0\157)
+ /Parent 53 0 R
  /Prev 55 0 R
  /Next 57 0 R
- /A 23 0 R
+ /A 15 0 R
 >> endobj
 57 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\70\0\40\0\155\0\151\0\163\0\143)
- /Parent 49 0 R
+ /Title (\376\377\0\61\0\56\0\64\0\40\0\144\0\142)
+ /Parent 53 0 R
  /Prev 56 0 R
  /Next 58 0 R
- /A 25 0 R
+ /A 17 0 R
 >> endobj
 58 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\71\0\40\0\161\0\165\0\145\0\162\0\171\0\160\0\141\0\162\0\163\0\145\0\162)
- /Parent 49 0 R
+ /Title (\376\377\0\61\0\56\0\65\0\40\0\150\0\151\0\147\0\150\0\154\0\151\0\147\0\150\0\164\0\145\0\162)
+ /Parent 53 0 R
  /Prev 57 0 R
  /Next 59 0 R
- /A 27 0 R
+ /A 19 0 R
 >> endobj
 59 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\61\0\60\0\40\0\161\0\165\0\145\0\162\0\151\0\145\0\163)
- /Parent 49 0 R
+ /Title (\376\377\0\61\0\56\0\66\0\40\0\151\0\156\0\163\0\164\0\141\0\156\0\164\0\151\0\141\0\164\0\145\0\144)
+ /Parent 53 0 R
  /Prev 58 0 R
  /Next 60 0 R
- /A 29 0 R
+ /A 21 0 R
 >> endobj
 60 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\61\0\61\0\40\0\162\0\145\0\155\0\157\0\164\0\145)
- /Parent 49 0 R
+ /Title (\376\377\0\61\0\56\0\67\0\40\0\154\0\165\0\143\0\154\0\151)
+ /Parent 53 0 R
  /Prev 59 0 R
  /Next 61 0 R
- /A 31 0 R
+ /A 23 0 R
 >> endobj
 61 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\61\0\62\0\40\0\163\0\160\0\141\0\164\0\151\0\141\0\154)
- /Parent 49 0 R
+ /Title (\376\377\0\61\0\56\0\70\0\40\0\155\0\145\0\155\0\157\0\162\0\171)
+ /Parent 53 0 R
  /Prev 60 0 R
  /Next 62 0 R
- /A 33 0 R
+ /A 25 0 R
 >> endobj
 62 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\61\0\63\0\40\0\163\0\160\0\145\0\154\0\154\0\143\0\150\0\145\0\143\0\153\0\145\0\162)
- /Parent 49 0 R
+ /Title (\376\377\0\61\0\56\0\71\0\40\0\155\0\151\0\163\0\143)
+ /Parent 53 0 R
  /Prev 61 0 R
  /Next 63 0 R
- /A 35 0 R
+ /A 27 0 R
 >> endobj
 63 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\61\0\64\0\40\0\163\0\167\0\151\0\156\0\147)
- /Parent 49 0 R
+ /Title (\376\377\0\61\0\56\0\61\0\60\0\40\0\161\0\165\0\145\0\162\0\171\0\160\0\141\0\162\0\163\0\145\0\162)
+ /Parent 53 0 R
  /Prev 62 0 R
  /Next 64 0 R
- /A 37 0 R
+ /A 29 0 R
 >> endobj
 64 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\61\0\65\0\40\0\167\0\157\0\162\0\144\0\156\0\145\0\164)
- /Parent 49 0 R
+ /Title (\376\377\0\61\0\56\0\61\0\61\0\40\0\161\0\165\0\145\0\162\0\151\0\145\0\163)
+ /Parent 53 0 R
  /Prev 63 0 R
  /Next 65 0 R
- /A 39 0 R
+ /A 31 0 R
 >> endobj
 65 0 obj
 <<
- /Title (\376\377\0\61\0\56\0\61\0\66\0\40\0\170\0\155\0\154\0\55\0\161\0\165\0\145\0\162\0\171\0\55\0\160\0\141\0\162\0\163\0\145\0\162)
- /Parent 49 0 R
+ /Title (\376\377\0\61\0\56\0\61\0\62\0\40\0\162\0\145\0\155\0\157\0\164\0\145)
+ /Parent 53 0 R
  /Prev 64 0 R
- /A 41 0 R
+ /Next 66 0 R
+ /A 33 0 R
 >> endobj
 66 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\61\0\63\0\40\0\163\0\160\0\141\0\164\0\151\0\141\0\154)
+ /Parent 53 0 R
+ /Prev 65 0 R
+ /Next 67 0 R
+ /A 35 0 R
+>> endobj
+67 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\61\0\64\0\40\0\163\0\160\0\145\0\154\0\154\0\143\0\150\0\145\0\143\0\153\0\145\0\162)
+ /Parent 53 0 R
+ /Prev 66 0 R
+ /Next 68 0 R
+ /A 37 0 R
+>> endobj
+68 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\61\0\65\0\40\0\163\0\167\0\151\0\156\0\147)
+ /Parent 53 0 R
+ /Prev 67 0 R
+ /Next 69 0 R
+ /A 39 0 R
+>> endobj
+69 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\61\0\66\0\40\0\167\0\157\0\162\0\144\0\156\0\145\0\164)
+ /Parent 53 0 R
+ /Prev 68 0 R
+ /Next 70 0 R
+ /A 41 0 R
+>> endobj
+70 0 obj
+<<
+ /Title (\376\377\0\61\0\56\0\61\0\67\0\40\0\170\0\155\0\154\0\55\0\161\0\165\0\145\0\162\0\171\0\55\0\160\0\141\0\162\0\163\0\145\0\162)
+ /Parent 53 0 R
+ /Prev 69 0 R
+ /A 43 0 R
+>> endobj
+71 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F3
 /BaseFont /Helvetica-Bold
 /Encoding /WinAnsiEncoding >>
 endobj
-67 0 obj
+72 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F5
 /BaseFont /Times-Roman
 /Encoding /WinAnsiEncoding >>
 endobj
-68 0 obj
+73 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F1
 /BaseFont /Helvetica
 /Encoding /WinAnsiEncoding >>
 endobj
-69 0 obj
+74 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F2
 /BaseFont /Helvetica-Oblique
 /Encoding /WinAnsiEncoding >>
 endobj
-70 0 obj
+75 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F7
@@ -428,207 +462,218 @@ endobj
 endobj
 1 0 obj
 << /Type /Pages
-/Count 4
-/Kids [6 0 R 43 0 R 45 0 R 47 0 R ] >>
+/Count 5
+/Kids [6 0 R 45 0 R 47 0 R 49 0 R 51 0 R ] >>
 endobj
 2 0 obj
 << /Type /Catalog
 /Pages 1 0 R
- /Outlines 48 0 R
+ /Outlines 52 0 R
  /PageMode /UseOutlines
  >>
 endobj
 3 0 obj
 << 
-/Font << /F3 66 0 R /F5 67 0 R /F1 68 0 R /F2 69 0 R /F7 70 0 R >> 
+/Font << /F3 71 0 R /F5 72 0 R /F1 73 0 R /F2 74 0 R /F7 75 0 R >> 
 /ProcSet [ /PDF /ImageC /Text ] >> 
 endobj
 9 0 obj
 <<
 /S /GoTo
-/D [43 0 R /XYZ 85.0 659.0 null]
+/D [45 0 R /XYZ 85.0 659.0 null]
 >>
 endobj
 11 0 obj
 <<
 /S /GoTo
-/D [43 0 R /XYZ 85.0 339.066 null]
+/D [45 0 R /XYZ 85.0 339.066 null]
 >>
 endobj
 13 0 obj
 <<
 /S /GoTo
-/D [43 0 R /XYZ 85.0 266.613 null]
+/D [45 0 R /XYZ 85.0 266.613 null]
 >>
 endobj
 15 0 obj
 <<
 /S /GoTo
-/D [43 0 R /XYZ 85.0 180.96 null]
+/D [45 0 R /XYZ 85.0 180.96 null]
 >>
 endobj
 17 0 obj
 <<
 /S /GoTo
-/D [45 0 R /XYZ 85.0 637.8 null]
+/D [47 0 R /XYZ 85.0 637.8 null]
 >>
 endobj
 19 0 obj
 <<
 /S /GoTo
-/D [45 0 R /XYZ 85.0 565.347 null]
+/D [47 0 R /XYZ 85.0 565.347 null]
 >>
 endobj
 21 0 obj
 <<
 /S /GoTo
-/D [45 0 R /XYZ 85.0 479.694 null]
+/D [47 0 R /XYZ 85.0 492.894 null]
 >>
 endobj
 23 0 obj
 <<
 /S /GoTo
-/D [45 0 R /XYZ 85.0 407.241 null]
+/D [47 0 R /XYZ 85.0 407.241 null]
 >>
 endobj
 25 0 obj
 <<
 /S /GoTo
-/D [45 0 R /XYZ 85.0 334.788 null]
+/D [47 0 R /XYZ 85.0 334.788 null]
 >>
 endobj
 27 0 obj
 <<
 /S /GoTo
-/D [45 0 R /XYZ 85.0 249.135 null]
+/D [47 0 R /XYZ 85.0 262.335 null]
 >>
 endobj
 29 0 obj
 <<
 /S /GoTo
-/D [45 0 R /XYZ 85.0 163.482 null]
+/D [47 0 R /XYZ 85.0 176.682 null]
 >>
 endobj
 31 0 obj
 <<
 /S /GoTo
-/D [47 0 R /XYZ 85.0 616.6 null]
+/D [49 0 R /XYZ 85.0 616.6 null]
 >>
 endobj
 33 0 obj
 <<
 /S /GoTo
-/D [47 0 R /XYZ 85.0 544.147 null]
+/D [49 0 R /XYZ 85.0 544.147 null]
 >>
 endobj
 35 0 obj
 <<
 /S /GoTo
-/D [47 0 R /XYZ 85.0 471.694 null]
+/D [49 0 R /XYZ 85.0 471.694 null]
 >>
 endobj
 37 0 obj
 <<
 /S /GoTo
-/D [47 0 R /XYZ 85.0 399.241 null]
+/D [49 0 R /XYZ 85.0 399.241 null]
 >>
 endobj
 39 0 obj
 <<
 /S /GoTo
-/D [47 0 R /XYZ 85.0 326.788 null]
+/D [49 0 R /XYZ 85.0 326.788 null]
 >>
 endobj
 41 0 obj
 <<
 /S /GoTo
-/D [47 0 R /XYZ 85.0 254.335 null]
+/D [49 0 R /XYZ 85.0 254.335 null]
 >>
 endobj
-48 0 obj
+43 0 obj
+<<
+/S /GoTo
+/D [49 0 R /XYZ 85.0 181.882 null]
+>>
+endobj
+52 0 obj
 <<
- /First 49 0 R
- /Last 49 0 R
+ /First 53 0 R
+ /Last 53 0 R
 >> endobj
 xref
-0 71
+0 76
 0000000000 65535 f 
-0000011873 00000 n 
-0000011952 00000 n 
-0000012044 00000 n 
+0000012924 00000 n 
+0000013010 00000 n 
+0000013102 00000 n 
 0000000015 00000 n 
 0000000071 00000 n 
-0000001045 00000 n 
-0000001165 00000 n 
-0000001302 00000 n 
+0000001070 00000 n 
+0000001190 00000 n 
+0000001334 00000 n 
+0000013225 00000 n 
+0000001469 00000 n 
+0000013288 00000 n 
+0000001606 00000 n 
+0000013354 00000 n 
+0000001743 00000 n 
+0000013420 00000 n 
+0000001880 00000 n 
+0000013485 00000 n 
+0000002015 00000 n 
+0000013549 00000 n 
+0000002152 00000 n 
+0000013615 00000 n 
+0000002289 00000 n 
+0000013681 00000 n 
+0000002426 00000 n 
+0000013747 00000 n 
+0000002563 00000 n 
+0000013813 00000 n 
+0000002700 00000 n 
+0000013879 00000 n 
+0000002836 00000 n 
+0000013945 00000 n 
+0000002973 00000 n 
+0000014009 00000 n 
+0000003110 00000 n 
+0000014075 00000 n 
+0000003247 00000 n 
+0000014141 00000 n 
+0000003384 00000 n 
+0000014207 00000 n 
+0000003521 00000 n 
+0000014273 00000 n 
+0000003658 00000 n 
+0000014339 00000 n 
+0000003795 00000 n 
+0000005774 00000 n 
+0000005882 00000 n 
+0000007303 00000 n 
+0000007411 00000 n 
+0000008735 00000 n 
+0000008843 00000 n 
+0000009315 00000 n 
+0000014405 00000 n 
+0000009423 00000 n 
+0000009624 00000 n 
+0000009744 00000 n 
+0000009914 00000 n 
+0000010054 00000 n 
+0000010182 00000 n 
+0000010364 00000 n 
+0000010552 00000 n 
+0000010698 00000 n 
+0000010850 00000 n 
+0000010990 00000 n 
+0000011177 00000 n 
+0000011340 00000 n 
+0000011497 00000 n 
+0000011660 00000 n 
+0000011853 00000 n 
+0000012004 00000 n 
 0000012167 00000 n 
-0000001437 00000 n 
-0000012230 00000 n 
-0000001574 00000 n 
-0000012296 00000 n 
-0000001711 00000 n 
-0000012362 00000 n 
-0000001846 00000 n 
-0000012427 00000 n 
-0000001983 00000 n 
-0000012491 00000 n 
-0000002120 00000 n 
-0000012557 00000 n 
-0000002257 00000 n 
-0000012623 00000 n 
-0000002394 00000 n 
-0000012689 00000 n 
-0000002531 00000 n 
-0000012755 00000 n 
-0000002667 00000 n 
-0000012821 00000 n 
-0000002804 00000 n 
-0000012887 00000 n 
-0000002941 00000 n 
-0000012951 00000 n 
-0000003078 00000 n 
-0000013017 00000 n 
-0000003215 00000 n 
-0000013083 00000 n 
-0000003352 00000 n 
-0000013149 00000 n 
-0000003489 00000 n 
-0000013215 00000 n 
-0000003626 00000 n 
-0000005559 00000 n 
-0000005667 00000 n 
-0000007100 00000 n 
-0000007208 00000 n 
-0000008409 00000 n 
-0000013281 00000 n 
-0000008517 00000 n 
-0000008718 00000 n 
-0000008838 00000 n 
-0000009008 00000 n 
-0000009136 00000 n 
-0000009318 00000 n 
-0000009506 00000 n 
-0000009652 00000 n 
-0000009804 00000 n 
-0000009944 00000 n 
-0000010126 00000 n 
-0000010289 00000 n 
-0000010446 00000 n 
-0000010609 00000 n 
-0000010802 00000 n 
-0000010953 00000 n 
-0000011116 00000 n 
-0000011317 00000 n 
-0000011430 00000 n 
-0000011540 00000 n 
-0000011648 00000 n 
-0000011764 00000 n 
+0000012368 00000 n 
+0000012481 00000 n 
+0000012591 00000 n 
+0000012699 00000 n 
+0000012815 00000 n 
 trailer
 <<
-/Size 71
+/Size 76
 /Root 2 0 R
 /Info 4 0 R
 >>
 startxref
-13332
+14456
 %%EOF

Modified: lucene/dev/branches/bulkpostings/lucene/docs/queryparsersyntax.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/docs/queryparsersyntax.html?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/docs/queryparsersyntax.html (original)
+++ lucene/dev/branches/bulkpostings/lucene/docs/queryparsersyntax.html Tue Mar 15 21:35:17 2011
@@ -130,7 +130,7 @@ document.write("Last Published: " + docu
 <a href="api/core/index.html">Core</a>
 </div>
 <div class="menuitem">
-<a href="api/demo/index.html">Demo</a>
+<a href="api/test-framework/index.html">Test Framework</a>
 </div>
 <div onclick="SwitchMenu('menu_1.1.3.4', 'skin/')" id="menu_1.1.3.4Title" class="menutitle">Contrib</div>
 <div id="menu_1.1.3.4" class="menuitemgroup">
@@ -147,6 +147,9 @@ document.write("Last Published: " + docu
 <a href="api/contrib-benchmark/index.html">Benchmark</a>
 </div>
 <div class="menuitem">
+<a href="api/contrib-demo/index.html">Demo</a>
+</div>
+<div class="menuitem">
 <a href="api/contrib-highlighter/index.html">Highlighter</a>
 </div>
 <div class="menuitem">

Modified: lucene/dev/branches/bulkpostings/lucene/docs/scoring.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/docs/scoring.html?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/docs/scoring.html (original)
+++ lucene/dev/branches/bulkpostings/lucene/docs/scoring.html Tue Mar 15 21:35:17 2011
@@ -130,7 +130,7 @@ document.write("Last Published: " + docu
 <a href="api/core/index.html">Core</a>
 </div>
 <div class="menuitem">
-<a href="api/demo/index.html">Demo</a>
+<a href="api/test-framework/index.html">Test Framework</a>
 </div>
 <div onclick="SwitchMenu('menu_1.1.3.4', 'skin/')" id="menu_1.1.3.4Title" class="menutitle">Contrib</div>
 <div id="menu_1.1.3.4" class="menuitemgroup">
@@ -147,6 +147,9 @@ document.write("Last Published: " + docu
 <a href="api/contrib-benchmark/index.html">Benchmark</a>
 </div>
 <div class="menuitem">
+<a href="api/contrib-demo/index.html">Demo</a>
+</div>
+<div class="menuitem">
 <a href="api/contrib-highlighter/index.html">Highlighter</a>
 </div>
 <div class="menuitem">

Modified: lucene/dev/branches/bulkpostings/lucene/docs/systemrequirements.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/docs/systemrequirements.html?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/docs/systemrequirements.html (original)
+++ lucene/dev/branches/bulkpostings/lucene/docs/systemrequirements.html Tue Mar 15 21:35:17 2011
@@ -128,7 +128,7 @@ document.write("Last Published: " + docu
 <a href="api/core/index.html">Core</a>
 </div>
 <div class="menuitem">
-<a href="api/demo/index.html">Demo</a>
+<a href="api/test-framework/index.html">Test Framework</a>
 </div>
 <div onclick="SwitchMenu('menu_1.1.3.4', 'skin/')" id="menu_1.1.3.4Title" class="menutitle">Contrib</div>
 <div id="menu_1.1.3.4" class="menuitemgroup">
@@ -145,6 +145,9 @@ document.write("Last Published: " + docu
 <a href="api/contrib-benchmark/index.html">Benchmark</a>
 </div>
 <div class="menuitem">
+<a href="api/contrib-demo/index.html">Demo</a>
+</div>
+<div class="menuitem">
 <a href="api/contrib-highlighter/index.html">Highlighter</a>
 </div>
 <div class="menuitem">

Modified: lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/analysis/package.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/analysis/package.html?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/analysis/package.html (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/analysis/package.html Tue Mar 15 21:35:17 2011
@@ -130,7 +130,7 @@ There are many post tokenization steps t
     </li>
   </ul>
   However an application might invoke Analysis of any text for testing or for any other purpose, something like:
-  <PRE>
+  <PRE class="prettyprint">
       Analyzer analyzer = new StandardAnalyzer(); // or any other analyzer
       TokenStream ts = analyzer.tokenStream("myfield",new StringReader("some text goes here"));
       while (ts.incrementToken()) {
@@ -182,7 +182,7 @@ the source code of any one of the many s
   This allows phrase search and proximity search to seamlessly cross 
   boundaries between these "sections".
   In other words, if a certain field "f" is added like this:
-  <PRE>
+  <PRE class="prettyprint">
       document.add(new Field("f","first ends",...);
       document.add(new Field("f","starts two",...);
       indexWriter.addDocument(document);
@@ -191,7 +191,7 @@ the source code of any one of the many s
   Where desired, this behavior can be modified by introducing a "position gap" between consecutive field "sections", 
   simply by overriding 
   {@link org.apache.lucene.analysis.Analyzer#getPositionIncrementGap(java.lang.String) Analyzer.getPositionIncrementGap(fieldName)}:
-  <PRE>
+  <PRE class="prettyprint">
       Analyzer myAnalyzer = new StandardAnalyzer() {
          public int getPositionIncrementGap(String fieldName) {
            return 10;
@@ -220,7 +220,7 @@ the source code of any one of the many s
    tokens following a removed stop word, using
    {@link org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute#setPositionIncrement(int)}.
    This can be done with something like:
-   <PRE>
+   <PRE class="prettyprint">
       public TokenStream tokenStream(final String fieldName, Reader reader) {
         final TokenStream ts = someAnalyzer.tokenStream(fieldName, reader);
         TokenStream res = new TokenStream() {
@@ -334,7 +334,7 @@ here to illustrate the usage of the new 
 Then we will develop a custom Attribute, a PartOfSpeechAttribute, and add another filter to the chain which
 utilizes the new custom attribute, and call it PartOfSpeechTaggingFilter.
 <h4>Whitespace tokenization</h4>
-<pre>
+<pre class="prettyprint">
 public class MyAnalyzer extends Analyzer {
 
   public TokenStream tokenStream(String fieldName, Reader reader) {
@@ -381,7 +381,7 @@ API
 <h4>Adding a LengthFilter</h4>
 We want to suppress all tokens that have 2 or less characters. We can do that easily by adding a LengthFilter 
 to the chain. Only the tokenStream() method in our analyzer needs to be changed:
-<pre>
+<pre class="prettyprint">
   public TokenStream tokenStream(String fieldName, Reader reader) {
     TokenStream stream = new WhitespaceTokenizer(reader);
     stream = new LengthFilter(stream, 3, Integer.MAX_VALUE);
@@ -398,7 +398,7 @@ TokenStream
 API
 </pre>
 Now let's take a look how the LengthFilter is implemented (it is part of Lucene's core):
-<pre>
+<pre class="prettyprint">
 public final class LengthFilter extends TokenFilter {
 
   final int min;
@@ -448,7 +448,7 @@ is neccessary. The same is true for the 
 <h4>Adding a custom Attribute</h4>
 Now we're going to implement our own custom Attribute for part-of-speech tagging and call it consequently 
 <code>PartOfSpeechAttribute</code>. First we need to define the interface of the new Attribute:
-<pre>
+<pre class="prettyprint">
   public interface PartOfSpeechAttribute extends Attribute {
     public static enum PartOfSpeech {
       Noun, Verb, Adjective, Adverb, Pronoun, Preposition, Conjunction, Article, Unknown
@@ -470,7 +470,7 @@ and returns an actual instance. You can 
 Now here is the actual class that implements our new Attribute. Notice that the class has to extend
 {@link org.apache.lucene.util.AttributeImpl}:
 
-<pre>
+<pre class="prettyprint">
 public final class PartOfSpeechAttributeImpl extends AttributeImpl 
                             implements PartOfSpeechAttribute{
   
@@ -513,7 +513,7 @@ This is a simple Attribute implementatio
 new <code>AttributeImpl</code> class and therefore implements its abstract methods <code>clear(), copyTo(), equals(), hashCode()</code>.
 Now we need a TokenFilter that can set this new PartOfSpeechAttribute for each token. In this example we show a very naive filter
 that tags every word with a leading upper-case letter as a 'Noun' and all other words as 'Unknown'.
-<pre>
+<pre class="prettyprint">
   public static class PartOfSpeechTaggingFilter extends TokenFilter {
     PartOfSpeechAttribute posAtt;
     CharTermAttribute termAtt;
@@ -544,7 +544,7 @@ Just like the LengthFilter, this new fil
 stores references in instance variables. Notice how you only need to pass in the interface of the new
 Attribute and instantiating the correct class is automatically been taken care of.
 Now we need to add the filter to the chain:
-<pre>
+<pre class="prettyprint">
   public TokenStream tokenStream(String fieldName, Reader reader) {
     TokenStream stream = new WhitespaceTokenizer(reader);
     stream = new LengthFilter(stream, 3, Integer.MAX_VALUE);
@@ -564,7 +564,7 @@ API
 Apparently it hasn't changed, which shows that adding a custom attribute to a TokenStream/Filter chain does not
 affect any existing consumers, simply because they don't know the new Attribute. Now let's change the consumer
 to make use of the new PartOfSpeechAttribute and print it out:
-<pre>
+<pre class="prettyprint">
   public static void main(String[] args) throws IOException {
     // text to tokenize
     final String text = "This is a demo of the new TokenStream API";
@@ -606,7 +606,7 @@ API the reader could now write an Attrib
 of a sentence or not. Then the PartOfSpeechTaggingFilter can make use of this knowledge and only tag capitalized words
 as nouns if not the first word of a sentence (we know, this is still not a correct behavior, but hey, it's a good exercise). 
 As a small hint, this is how the new Attribute class could begin:
-<pre>
+<pre class="prettyprint">
   public class FirstTokenOfSentenceAttributeImpl extends Attribute
                    implements FirstTokenOfSentenceAttribute {
     

Modified: lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/analysis/tokenattributes/CharTermAttributeImpl.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/analysis/tokenattributes/CharTermAttributeImpl.java?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/analysis/tokenattributes/CharTermAttributeImpl.java (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/analysis/tokenattributes/CharTermAttributeImpl.java Tue Mar 15 21:35:17 2011
@@ -77,7 +77,7 @@ public class CharTermAttributeImpl exten
   }
   
   // *** TermToBytesRefAttribute interface ***
-  public final int toBytesRef(BytesRef target) {
+  public int toBytesRef(BytesRef target) {
     return UnicodeUtil.UTF16toUTF8WithHash(termBuffer, 0, termLength, target);
   }
   

Modified: lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/BufferedDeletesStream.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/BufferedDeletesStream.java?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/BufferedDeletesStream.java (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/BufferedDeletesStream.java Tue Mar 15 21:35:17 2011
@@ -121,9 +121,13 @@ class BufferedDeletesStream {
     // Current gen, for the merged segment:
     public final long gen;
 
-    ApplyDeletesResult(boolean anyDeletes, long gen) {
+    // If non-null, contains segments that are 100% deleted
+    public final SegmentInfos allDeleted;
+
+    ApplyDeletesResult(boolean anyDeletes, long gen, SegmentInfos allDeleted) {
       this.anyDeletes = anyDeletes;
       this.gen = gen;
+      this.allDeleted = allDeleted;
     }
   }
 
@@ -154,14 +158,14 @@ class BufferedDeletesStream {
     final long t0 = System.currentTimeMillis();
 
     if (infos.size() == 0) {
-      return new ApplyDeletesResult(false, nextGen++);
+      return new ApplyDeletesResult(false, nextGen++, null);
     }
 
     assert checkDeleteStats();
 
     if (!any()) {
       message("applyDeletes: no deletes; skipping");
-      return new ApplyDeletesResult(false, nextGen++);
+      return new ApplyDeletesResult(false, nextGen++, null);
     }
 
     if (infoStream != null) {
@@ -178,6 +182,8 @@ class BufferedDeletesStream {
     int infosIDX = infos2.size()-1;
     int delIDX = deletes.size()-1;
 
+    SegmentInfos allDeleted = null;
+
     while (infosIDX >= 0) {
       //System.out.println("BD: cycle delIDX=" + delIDX + " infoIDX=" + infosIDX);
 
@@ -199,6 +205,7 @@ class BufferedDeletesStream {
         assert readerPool.infoIsLive(info);
         SegmentReader reader = readerPool.get(info, false);
         int delCount = 0;
+        final boolean segAllDeletes;
         try {
           if (coalescedDeletes != null) {
             //System.out.println("    del coalesced");
@@ -209,13 +216,21 @@ class BufferedDeletesStream {
           // Don't delete by Term here; DocumentsWriter
           // already did that on flush:
           delCount += applyQueryDeletes(packet.queriesIterable(), reader);
+          segAllDeletes = reader.numDocs() == 0;
         } finally {
           readerPool.release(reader);
         }
         anyNewDeletes |= delCount > 0;
 
+        if (segAllDeletes) {
+          if (allDeleted == null) {
+            allDeleted = new SegmentInfos();
+          }
+          allDeleted.add(info);
+        }
+
         if (infoStream != null) {
-          message("seg=" + info + " segGen=" + segGen + " segDeletes=[" + packet + "]; coalesced deletes=[" + (coalescedDeletes == null ? "null" : coalescedDeletes) + "] delCount=" + delCount);
+          message("seg=" + info + " segGen=" + segGen + " segDeletes=[" + packet + "]; coalesced deletes=[" + (coalescedDeletes == null ? "null" : coalescedDeletes) + "] delCount=" + delCount + (segAllDeletes ? " 100% deleted" : ""));
         }
 
         if (coalescedDeletes == null) {
@@ -234,16 +249,25 @@ class BufferedDeletesStream {
           assert readerPool.infoIsLive(info);
           SegmentReader reader = readerPool.get(info, false);
           int delCount = 0;
+          final boolean segAllDeletes;
           try {
             delCount += applyTermDeletes(coalescedDeletes.termsIterable(), reader);
             delCount += applyQueryDeletes(coalescedDeletes.queriesIterable(), reader);
+            segAllDeletes = reader.numDocs() == 0;
           } finally {
             readerPool.release(reader);
           }
           anyNewDeletes |= delCount > 0;
 
+          if (segAllDeletes) {
+            if (allDeleted == null) {
+              allDeleted = new SegmentInfos();
+            }
+            allDeleted.add(info);
+          }
+
           if (infoStream != null) {
-            message("seg=" + info + " segGen=" + segGen + " coalesced deletes=[" + (coalescedDeletes == null ? "null" : coalescedDeletes) + "] delCount=" + delCount);
+            message("seg=" + info + " segGen=" + segGen + " coalesced deletes=[" + (coalescedDeletes == null ? "null" : coalescedDeletes) + "] delCount=" + delCount + (segAllDeletes ? " 100% deleted" : ""));
           }
         }
         info.setBufferedDeletesGen(nextGen);
@@ -258,7 +282,7 @@ class BufferedDeletesStream {
     }
     // assert infos != segmentInfos || !any() : "infos=" + infos + " segmentInfos=" + segmentInfos + " any=" + any;
     
-    return new ApplyDeletesResult(anyNewDeletes, nextGen++);
+    return new ApplyDeletesResult(anyNewDeletes, nextGen++, allDeleted);
   }
 
   public synchronized long getNextGen() {

Modified: lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/CheckIndex.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/CheckIndex.java?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/CheckIndex.java (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/CheckIndex.java Tue Mar 15 21:35:17 2011
@@ -348,8 +348,14 @@ public class CheckIndex {
 
     if (format == DefaultSegmentInfosWriter.FORMAT_DIAGNOSTICS) {
       sFormat = "FORMAT_DIAGNOSTICS [Lucene 2.9]";
+    } else if (format == DefaultSegmentInfosWriter.FORMAT_HAS_VECTORS) {
+      sFormat = "FORMAT_HAS_VECTORS [Lucene 3.1]";
+    } else if (format == DefaultSegmentInfosWriter.FORMAT_3_1) {
+      sFormat = "FORMAT_3_1 [Lucene 3.1]";
     } else if (format == DefaultSegmentInfosWriter.FORMAT_4_0) {
       sFormat = "FORMAT_4_0 [Lucene 4.0]";
+    } else if (format == DefaultSegmentInfosWriter.FORMAT_CURRENT) {
+      throw new RuntimeException("BUG: You should update this tool!");
     } else if (format < DefaultSegmentInfosWriter.FORMAT_CURRENT) {
       sFormat = "int=" + format + " [newer version of Lucene than this tool supports]";
       skip = true;

Modified: lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/DirectoryReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/DirectoryReader.java?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/DirectoryReader.java (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/DirectoryReader.java Tue Mar 15 21:35:17 2011
@@ -146,7 +146,6 @@ class DirectoryReader extends IndexReade
     this.readOnly = true;
     this.applyAllDeletes = applyAllDeletes;       // saved for reopen
 
-    segmentInfos = (SegmentInfos) infos.clone();// make sure we clone otherwise we share mutable state with IW
     this.termInfosIndexDivisor = termInfosIndexDivisor;
     if (codecs == null) {
       this.codecs = CodecProvider.getDefault();
@@ -159,23 +158,33 @@ class DirectoryReader extends IndexReade
     // us, which ensures infos will not change; so there's
     // no need to process segments in reverse order
     final int numSegments = infos.size();
-    SegmentReader[] readers = new SegmentReader[numSegments];
+
+    List<SegmentReader> readers = new ArrayList<SegmentReader>();
     final Directory dir = writer.getDirectory();
 
+    segmentInfos = (SegmentInfos) infos.clone();
+    int infosUpto = 0;
     for (int i=0;i<numSegments;i++) {
       boolean success = false;
       try {
         final SegmentInfo info = infos.info(i);
         assert info.dir == dir;
-        readers[i] = writer.readerPool.getReadOnlyClone(info, true, termInfosIndexDivisor);
-        readers[i].readerFinishedListeners = readerFinishedListeners;
+        final SegmentReader reader = writer.readerPool.getReadOnlyClone(info, true, termInfosIndexDivisor);
+        if (reader.numDocs() > 0 || writer.getKeepFullyDeletedSegments()) {
+          reader.readerFinishedListeners = readerFinishedListeners;
+          readers.add(reader);
+          infosUpto++;
+        } else {
+          reader.close();
+          segmentInfos.remove(infosUpto);
+        }
         success = true;
       } finally {
         if (!success) {
           // Close all readers we had opened:
-          for(i--;i>=0;i--) {
+          for(SegmentReader reader : readers) {
             try {
-              readers[i].close();
+              reader.close();
             } catch (Throwable ignore) {
               // keep going - we want to clean up as much as possible
             }
@@ -186,7 +195,7 @@ class DirectoryReader extends IndexReade
 
     this.writer = writer;
 
-    initialize(readers);
+    initialize(readers.toArray(new SegmentReader[readers.size()]));
   }
 
   /** This constructor is only used for {@link #reopen()} */

Modified: lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java Tue Mar 15 21:35:17 2011
@@ -518,7 +518,7 @@ final class DocumentsWriter {
       if (segmentInfos.size() > 0 || newSegment != null) {
         final FrozenBufferedDeletes packet = new FrozenBufferedDeletes(pendingDeletes, delGen);
         if (infoStream != null) {
-          message("flush: push buffered deletes");
+          message("flush: push buffered deletes startSize=" + pendingDeletes.bytesUsed.get() + " frozenSize=" + packet.bytesUsed);
         }
         bufferedDeletesStream.push(packet);
         if (infoStream != null) {
@@ -648,8 +648,16 @@ final class DocumentsWriter {
         newSegment.setDelCount(delCount);
         newSegment.advanceDelGen();
         final String delFileName = newSegment.getDelFileName();
+        if (infoStream != null) {
+          message("flush: write " + delCount + " deletes to " + delFileName);
+        }
         boolean success2 = false;
         try {
+          // TODO: in the NRT case it'd be better to hand
+          // this del vector over to the
+          // shortly-to-be-opened SegmentReader and let it
+          // carry the changes; there's no reason to use
+          // filesystem as intermediary here.
           flushState.deletedDocs.write(directory, delFileName);
           success2 = true;
         } finally {

Modified: lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/IndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/IndexReader.java?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/IndexReader.java (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/IndexReader.java Tue Mar 15 21:35:17 2011
@@ -996,7 +996,8 @@ public abstract class IndexReader implem
   }
 
   /** Returns the byte-encoded normalization factor for the named field of
-   * every document.  This is used by the search code to score documents.
+   *  every document.  This is used by the search code to score documents.
+   *  Returns null if norms were not indexed for this field.
    *
    * @see org.apache.lucene.document.Field#setBoost(float)
    */

Modified: lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1081952&r1=1081951&r2=1081952&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/IndexWriter.java Tue Mar 15 21:35:17 2011
@@ -388,8 +388,7 @@ public class IndexWriter implements Clos
 
     private final Map<SegmentInfo,SegmentReader> readerMap = new HashMap<SegmentInfo,SegmentReader>();
 
-    /** Forcefully clear changes for the specified segments,
-     *  and remove from the pool.   This is called on successful merge. */
+    /** Forcefully clear changes for the specified segments.  This is called on successful merge. */
     synchronized void clear(SegmentInfos infos) throws IOException {
       if (infos == null) {
         for (Map.Entry<SegmentInfo,SegmentReader> ent: readerMap.entrySet()) {
@@ -397,8 +396,9 @@ public class IndexWriter implements Clos
         }
       } else {
         for (final SegmentInfo info: infos) {
-          if (readerMap.containsKey(info)) {
-            readerMap.get(info).hasChanges = false;
+          final SegmentReader r = readerMap.get(info);
+          if (r != null) {
+            r.hasChanges = false;
           }
         }     
       }
@@ -407,8 +407,8 @@ public class IndexWriter implements Clos
     // used only by asserts
     public synchronized boolean infoIsLive(SegmentInfo info) {
       int idx = segmentInfos.indexOf(info);
-      assert idx != -1;
-      assert segmentInfos.get(idx) == info;
+      assert idx != -1: "info=" + info + " isn't in pool";
+      assert segmentInfos.get(idx) == info: "info=" + info + " doesn't match live info in segmentInfos";
       return true;
     }
 
@@ -478,6 +478,21 @@ public class IndexWriter implements Clos
 
       return false;
     }
+
+    public synchronized void drop(SegmentInfos infos) throws IOException {
+      for(SegmentInfo info : infos) {
+        drop(info);
+      }
+    }
+
+    public synchronized void drop(SegmentInfo info) throws IOException {
+      final SegmentReader sr = readerMap.get(info);
+      if (sr != null) {
+        sr.hasChanges = false;
+        readerMap.remove(info);
+        sr.close();
+      }
+    }
     
     /** Remove all our references to readers, and commits
      *  any pending changes. */
@@ -516,19 +531,18 @@ public class IndexWriter implements Clos
      * Commit all segment reader in the pool.
      * @throws IOException
      */
-    synchronized void commit() throws IOException {
+    synchronized void commit(SegmentInfos infos) throws IOException {
 
       // We invoke deleter.checkpoint below, so we must be
       // sync'd on IW:
       assert Thread.holdsLock(IndexWriter.this);
 
-      for (Map.Entry<SegmentInfo,SegmentReader> ent : readerMap.entrySet()) {
+      for (SegmentInfo info : infos) {
 
-        SegmentReader sr = ent.getValue();
-        if (sr.hasChanges) {
-          assert infoIsLive(sr.getSegmentInfo());
+        final SegmentReader sr = readerMap.get(info);
+        if (sr != null && sr.hasChanges) {
+          assert infoIsLive(info);
           sr.doCommit(null);
-
           // Must checkpoint w/ deleter, because this
           // segment reader will have created new _X_N.del
           // file.
@@ -849,9 +863,9 @@ public class IndexWriter implements Clos
           final int fieldCount = segFieldInfos.size();
           for(int fieldNumber=0;fieldNumber<fieldCount;fieldNumber++) {
             fieldInfos.add(segFieldInfos.fieldInfo(fieldNumber));
-          }
         }
-      } else {
+      }
+    } else {
         // Already a 4.0 index; just seed the FieldInfos
         // from the last segment
         fieldInfos = getFieldInfos(segmentInfos.info(segmentInfos.size()-1));
@@ -2558,6 +2572,24 @@ public class IndexWriter implements Clos
         if (result.anyDeletes) {
           checkpoint();
         }
+        if (!keepFullyDeletedSegments && result.allDeleted != null) {
+          if (infoStream != null) {
+            message("drop 100% deleted segments: " + result.allDeleted);
+          }
+          for(SegmentInfo info : result.allDeleted) {
+            // If a merge has already registered for this
+            // segment, we leave it in the readerPool; the
+            // merge will skip merging it and will then drop
+            // it once it's done:
+            if (!mergingSegments.contains(info)) {
+              segmentInfos.remove(info);
+              if (readerPool != null) {
+                readerPool.drop(info);
+              }
+            }
+          }
+          checkpoint();
+        }
         bufferedDeletesStream.prune(segmentInfos);
         assert !bufferedDeletesStream.any();
         flushControl.clearDeletes();
@@ -2634,9 +2666,13 @@ public class IndexWriter implements Clos
       SegmentInfo info = sourceSegments.info(i);
       minGen = Math.min(info.getBufferedDeletesGen(), minGen);
       int docCount = info.docCount;
-      SegmentReader previousReader = merge.readersClone[i];
+      final SegmentReader previousReader = merge.readerClones.get(i);
+      if (previousReader == null) {
+        // Reader was skipped because it was 100% deletions
+        continue;
+      }
       final Bits prevDelDocs = previousReader.getDeletedDocs();
-      SegmentReader currentReader = merge.readers[i];
+      final SegmentReader currentReader = merge.readers.get(i);
       final Bits currentDelDocs = currentReader.getDeletedDocs();
       if (previousReader.hasDeletions()) {
 
@@ -2719,18 +2755,21 @@ public class IndexWriter implements Clos
       return false;
     }
 
-    ensureValidMerge(merge);
-
     commitMergedDeletes(merge, mergedReader);
       
     // If the doc store we are using has been closed and
     // is in now compound format (but wasn't when we
     // started), then we will switch to the compound
     // format as well:
-    setMergeDocStoreIsCompoundFile(merge);
 
     assert !segmentInfos.contains(merge.info);
 
+    final boolean allDeleted = mergedReader.numDocs() == 0;
+
+    if (infoStream != null && allDeleted) {
+      message("merged segment " + merge.info + " is 100% deleted" +  (keepFullyDeletedSegments ? "" : "; skipping insert"));
+    }
+
     final Set mergedAway = new HashSet<SegmentInfo>(merge.segments);
     int segIdx = 0;
     int newSegIdx = 0;
@@ -2739,7 +2778,7 @@ public class IndexWriter implements Clos
     while(segIdx < curSegCount) {
       final SegmentInfo info = segmentInfos.info(segIdx++);
       if (mergedAway.contains(info)) {
-        if (!inserted) {
+        if (!inserted && (!allDeleted || keepFullyDeletedSegments)) {
           segmentInfos.set(segIdx-1, merge.info);
           inserted = true;
           newSegIdx++;
@@ -2748,7 +2787,20 @@ public class IndexWriter implements Clos
         segmentInfos.set(newSegIdx++, info);
       }
     }
-    assert newSegIdx == curSegCount - merge.segments.size() + 1;
+
+    // Either we found place to insert segment, or, we did
+    // not, but only because all segments we merged became
+    // deleted while we are merging, in which case it should
+    // be the case that the new segment is also all deleted:
+    if (!inserted) {
+      assert allDeleted;
+      if (keepFullyDeletedSegments) {
+        segmentInfos.add(0, merge.info);
+      } else {
+        readerPool.drop(merge.info);
+      }
+    }
+
     segmentInfos.subList(newSegIdx, segmentInfos.size()).clear();
 
     if (infoStream != null) {
@@ -2770,7 +2822,6 @@ public class IndexWriter implements Clos
       // cascade the optimize:
       segmentsToOptimize.add(merge.info);
     }
-
     
     return true;
   }
@@ -2913,8 +2964,9 @@ public class IndexWriter implements Clos
     // is running (while synchronized) to avoid race
     // condition where two conflicting merges from different
     // threads, start
-    for(int i=0;i<count;i++)
+    for(int i=0;i<count;i++) {
       mergingSegments.add(merge.segments.info(i));
+    }
 
     // Merge is now registered
     merge.registerDone = true;
@@ -2966,10 +3018,28 @@ public class IndexWriter implements Clos
 
     // Lock order: IW -> BD
     final BufferedDeletesStream.ApplyDeletesResult result = bufferedDeletesStream.applyDeletes(readerPool, merge.segments);
+
     if (result.anyDeletes) {
       checkpoint();
     }
 
+    if (!keepFullyDeletedSegments && result.allDeleted != null) {
+      if (infoStream != null) {
+        message("drop 100% deleted segments: " + result.allDeleted);
+      }
+      for(SegmentInfo info : result.allDeleted) {
+        segmentInfos.remove(info);
+        if (merge.segments.contains(info)) {
+          mergingSegments.remove(info);
+          merge.segments.remove(info);
+        }
+      }
+      if (readerPool != null) {
+        readerPool.drop(result.allDeleted);
+      }
+      checkpoint();
+    }
+
     merge.info.setBufferedDeletesGen(result.gen);
 
     // Lock order: IW -> BD
@@ -3023,8 +3093,9 @@ public class IndexWriter implements Clos
     if (merge.registerDone) {
       final SegmentInfos sourceSegments = merge.segments;
       final int end = sourceSegments.size();
-      for(int i=0;i<end;i++)
+      for(int i=0;i<end;i++) {
         mergingSegments.remove(sourceSegments.info(i));
+      }
       mergingSegments.remove(merge.info);
       merge.registerDone = false;
     }
@@ -3032,47 +3103,30 @@ public class IndexWriter implements Clos
     runningMerges.remove(merge);
   }
 
-  private synchronized void setMergeDocStoreIsCompoundFile(MergePolicy.OneMerge merge) {
-    final String mergeDocStoreSegment = merge.info.getDocStoreSegment(); 
-    if (mergeDocStoreSegment != null && !merge.info.getDocStoreIsCompoundFile()) {
-      final int size = segmentInfos.size();
-      for(int i=0;i<size;i++) {
-        final SegmentInfo info = segmentInfos.info(i);
-        final String docStoreSegment = info.getDocStoreSegment();
-        if (docStoreSegment != null &&
-            docStoreSegment.equals(mergeDocStoreSegment) && 
-            info.getDocStoreIsCompoundFile()) {
-          merge.info.setDocStoreIsCompoundFile(true);
-          break;
-        }
-      }
-    }
-  }
-
   private synchronized void closeMergeReaders(MergePolicy.OneMerge merge, boolean suppressExceptions) throws IOException {
-    final int numSegments = merge.segments.size();
+    final int numSegments = merge.readers.size();
     if (suppressExceptions) {
       // Suppress any new exceptions so we throw the
       // original cause
       boolean anyChanges = false;
       for (int i=0;i<numSegments;i++) {
-        if (merge.readers[i] != null) {
+        if (merge.readers.get(i) != null) {
           try {
-            anyChanges |= readerPool.release(merge.readers[i], false);
+            anyChanges |= readerPool.release(merge.readers.get(i), false);
           } catch (Throwable t) {
           }
-          merge.readers[i] = null;
+          merge.readers.set(i, null);
         }
 
-        if (merge.readersClone[i] != null) {
+        if (i < merge.readerClones.size() && merge.readerClones.get(i) != null) {
           try {
-            merge.readersClone[i].close();
+            merge.readerClones.get(i).close();
           } catch (Throwable t) {
           }
           // This was a private clone and we had the
           // only reference
-          assert merge.readersClone[i].getRefCount() == 0: "refCount should be 0 but is " + merge.readersClone[i].getRefCount();
-          merge.readersClone[i] = null;
+          assert merge.readerClones.get(i).getRefCount() == 0: "refCount should be 0 but is " + merge.readerClones.get(i).getRefCount();
+          merge.readerClones.set(i, null);
         }
       }
       if (anyChanges) {
@@ -3080,16 +3134,16 @@ public class IndexWriter implements Clos
       }
     } else {
       for (int i=0;i<numSegments;i++) {
-        if (merge.readers[i] != null) {
-          readerPool.release(merge.readers[i], true);
-          merge.readers[i] = null;
+        if (merge.readers.get(i) != null) {
+          readerPool.release(merge.readers.get(i), true);
+          merge.readers.set(i, null);
         }
 
-        if (merge.readersClone[i] != null) {
-          merge.readersClone[i].close();
+        if (i < merge.readerClones.size() && merge.readerClones.get(i) != null) {
+          merge.readerClones.get(i).close();
           // This was a private clone and we had the only reference
-          assert merge.readersClone[i].getRefCount() == 0;
-          merge.readersClone[i] = null;
+          assert merge.readerClones.get(i).getRefCount() == 0;
+          merge.readerClones.set(i, null);
         }
       }
     }
@@ -3108,7 +3162,6 @@ public class IndexWriter implements Clos
     int mergedDocCount = 0;
 
     SegmentInfos sourceSegments = merge.segments;
-    final int numSegments = sourceSegments.size();
 
     SegmentMerger merger = new SegmentMerger(directory, termIndexInterval, mergedName, merge,
                                              codecs, payloadProcessorProvider,
@@ -3118,36 +3171,43 @@ public class IndexWriter implements Clos
       message("merging " + merge.segString(directory) + " mergeVectors=" + merger.fieldInfos().hasVectors());
     }
 
+    merge.readers = new ArrayList<SegmentReader>();
+    merge.readerClones = new ArrayList<SegmentReader>();
+
     merge.info.setHasVectors(merger.fieldInfos().hasVectors());
-    merge.readers = new SegmentReader[numSegments];
-    merge.readersClone = new SegmentReader[numSegments];
 
     // This is try/finally to make sure merger's readers are
     // closed:
     boolean success = false;
     try {
       int totDocCount = 0;
+      int segUpto = 0;
+      while(segUpto < sourceSegments.size()) {
 
-      for (int i = 0; i < numSegments; i++) {
-        final SegmentInfo info = sourceSegments.info(i);
+        final SegmentInfo info = sourceSegments.info(segUpto);
 
         // Hold onto the "live" reader; we will use this to
         // commit merged deletes
-        SegmentReader reader = merge.readers[i] = readerPool.get(info, true,
-                                                                 MERGE_READ_BUFFER_SIZE,
-                                                                 -config.getReaderTermsIndexDivisor());
+        final SegmentReader reader = readerPool.get(info, true,
+                                                    MERGE_READ_BUFFER_SIZE,
+                                                    -config.getReaderTermsIndexDivisor());
+        merge.readers.add(reader);
 
         // We clone the segment readers because other
         // deletes may come in while we're merging so we
         // need readers that will not change
-        SegmentReader clone = merge.readersClone[i] = (SegmentReader) reader.clone(true);
-        merger.add(clone);
+        final SegmentReader clone = (SegmentReader) reader.clone(true);
+        merge.readerClones.add(clone);
 
-        totDocCount += clone.numDocs();
+        if (clone.numDocs() > 0) {
+          merger.add(clone);
+          totDocCount += clone.numDocs();
+        }
+        segUpto++;
       }
 
       if (infoStream != null) {
-        message("merge: total "+totDocCount+" docs");
+        message("merge: total " + totDocCount + " docs");
       }
 
       merge.checkAborted(directory);
@@ -3160,11 +3220,11 @@ public class IndexWriter implements Clos
 
       if (infoStream != null) {
         message("merge segmentCodecs=" + merger.getSegmentCodecs());
-        message("merge store matchedCount=" + merger.getMatchedSubReaderCount() + " vs " + numSegments);
+        message("merge store matchedCount=" + merger.getMatchedSubReaderCount() + " vs " + merge.readers.size());
       }
-      anyNonBulkMerges |= merger.getMatchedSubReaderCount() != numSegments;
+      anyNonBulkMerges |= merger.getAnyNonBulkMerges();
       
-      assert mergedDocCount == totDocCount;
+      assert mergedDocCount == totDocCount: "mergedDocCount=" + mergedDocCount + " vs " + totDocCount;
 
       // Very important to do this before opening the reader
       // because codec must know if prox was written for
@@ -3235,7 +3295,7 @@ public class IndexWriter implements Clos
       final int termsIndexDivisor;
       final boolean loadDocStores;
 
-      if (poolReaders && mergedSegmentWarmer != null) {
+      if (mergedSegmentWarmer != null) {
         // Load terms index & doc stores so the segment
         // warmer can run searches, load documents/term
         // vectors
@@ -3347,6 +3407,10 @@ public class IndexWriter implements Clos
     keepFullyDeletedSegments = true;
   }
 
+  boolean getKeepFullyDeletedSegments() {
+    return keepFullyDeletedSegments;
+  }
+
   // called only from assert
   private boolean filesExist(SegmentInfos toSync) throws IOException {
     Collection<String> files = toSync.files(directory, false);
@@ -3402,12 +3466,8 @@ public class IndexWriter implements Clos
         if (infoStream != null)
           message("startCommit index=" + segString(segmentInfos) + " changeCount=" + changeCount);
 
-        readerPool.commit();
-        
+        readerPool.commit(segmentInfos);
         toSync = (SegmentInfos) segmentInfos.clone();
-        if (!keepFullyDeletedSegments) {
-          toSync.pruneDeletedSegments();
-        }
 
         assert filesExist(toSync);