Differences between revisions 43 and 44
Revision 43 as of 2011-08-05 06:48:16
Size: 50626
Editor: ABTS-AP-dynamic-030
Comment: solr description
Revision 44 as of 2011-08-05 08:35:33
Size: 15418
Editor: 94-225-167-177
Comment: removing spam
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
%PDF-1.4
%ª«¬­
4 0 obj
<<
/Title (Welcome to Apache Lucene!)
/Subject (Lucene)
/Producer (Apache FOP Version 0.95)
/CreationDate (D:20110728223432+02'00')
>>
endobj
5 0 obj
<<
  /N 3
  /Length 25 0 R
  /Filter /FlateDecode
>>
stream
xœ–wTSهϽ7½P’Š”ÐkhRH
½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š
Q±ëDÔqp–Id­ß¼yï͛ß÷~kŸ½ÏÝgï}ÖºüƒÂLX €
¡Xáçň‹g`
ðlàp³³BøF™|،l™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1ؙY
árfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™
°¦eµÙú‡mi]ëP»ý‡Í`/Š²¾u}q
º|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù
柇øþu
ü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~
(* {d+Ðï}
ÆGù͋љ˜ûςþ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð
Ì@„
ÈR‡t CÈ
²
XäCP
”%CBH@ë R¨
ª†ê¡fè[è(tº
C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX
?§€:¢‹0ÂFB‘x$ !«¤i@ڐ
¤¹ŠH‘§È[EE1PL”
Ê
⢖¡V¡6£ªQP¨>ÔUÔ(j
õMFk¢ÍÑÎèt,:‹.FW ›Ð
è³èô8úƒ¡cŒ1ŽL
&³³³ӎ9
ƌa¦±X¬:Ö
ëŠ
År°bl1¶
{{{;Ž}ƒ#âtp¶8_\<Nˆ+ÄUàZp'pWp¸¼ÞïŒÅóðËñeøF|~?ŽŸ!(Œ ®„HB*a-¡’ÐF8K¸KxA$õˆNÄp¢€¸†XI<D<O
%¾%QHf$6)$!m!í'"Ý"½ “ÉFdr<YLÞBn&Ÿ!ß'¿Q *X*(ðV+Ô(t*\Qx¦ˆW4TôT\¬˜¯X¡xDqHñ©^ÉH‰­ÄQZ¥T£tTé†Ò´2UÙF9T9Cy³r‹òåG,ňâCáQŠ(û(g(cT„ªOeS¹ÔuÔFêYê8
C3¦ÐRi¥´ohƒ´)ŠŠJ´JžJÊq)
¡Ñèéô2úaúuú;U-UOU¾ê&Õ6Õ+ª¯Õæ¨y¨ñÕJÔÚÕFÔÞ©3Ô}ÔÓÔ·©w©ßÓ@i˜i„käjìÑ8«ñtmŽË
9‡çÜք5Í4#4WhîÓ
МÖÒÖòÓÊÒªÒ:£õT›®í¡ª½Cû„ö¤UÇMG ³Cç¤Îc†
ӑΨdô1¦t5uýu%ºõºƒº3zÆzQz
zíz÷ô ú,ý$ý
ú½úS:!­·
ñ†,ÃÃ]†ý†¯ŒbŒ6u=2V30Î7n5¾kB6q7YfÒ`rÍcÊ2M3ÝmzÙ
6³7K1«12‡Í
Ìæ»Í‡-ÐNB‹‹Lӓ™ÃleŽZÒ-ƒ-
-»,ŸYXÅ[m³ê·úhmonÝh}džbhShÓc󫭙-׶ÆöÚ\ò\ß¹«çvÏ}ngnÇ·ÛcwӞjb¿Á¾×þƒƒ£ƒÈ¡ÍaÒÑÀ1ѱÖñ‹Æ
cmfwB;y9­v:æôÖÙÁYì|Øù¦KšK‹Ë£yÆóøó獹ê¹r\ë]¥n
·D·½nRw]wŽ{ƒû}žG“Ç„§©gªçAÏg^Ö^"¯¯×lgöJö)oÄÛÏ»Ä{ЇâåSísßWÏ7Ù·ÕwÊÏÞo
ß)´ÿ6ÿZ܀怩@ÇÀ•}A¤ AÕA‚Í‚EÁ=!pH`Èö»ó
ç
çw
‚ЀÐí¡÷΅
}Ž 
¯ aQÑ¿€º`ɂ–¯"½"Ë"ïD™DI¢z££¢›£_ÇxǔÇHc­bWÆ^ŠÓˆÄuÇcã£ã›â§ú,ܹp<Á>¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôҀ¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMޞ<™âžR‘òTÀT
ž§ú§Ö¥¾N
M۟ö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6%
5eCً²»Å4ÙÏԀÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æ󵄵ik(´.,/|¹.f]O‘Vњ¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}ڒ´e°Ì¡lÏVÌVáÖëÛÜ·
(W.Ï/Û
²½scGɎ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û
6F7öÍúº¹I£©´éÃ~á~遈}͎ÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—
‡$‡
›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9ՕÒ%íŽë
>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|ϝé÷ì?yÞõü±
ÎŽ^d]ìºäp©sÀ~ ãû:
;‡
‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùańÎDó#ÛGÇ&}'/?^øxüI֓™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñOŸ~÷„óû
endstream
endobj
6 0 obj
[/ICCBased 5 0 R]
endobj
7 0 obj
<<
  /Type /Metadata
  /Subtype /XML
  /Length 26 0 R
>>
stream
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?><x:xmpmeta xmlns:x="adobe:ns:meta/">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description xmlns:pdf="http://ns.adobe.com/pdf/1.3/" rdf:about="">
<pdf:PDFVersion>1.4</pdf:PDFVersion>
<pdf:Producer>Apache FOP Version 0.95</pdf:Producer>
<pdf:Creator>Apache Forrest - http://forrest.apache.org/</pdf:Creator>
</rdf:Description>
<rdf:Description xmlns:xmp="http://ns.adobe.com/xap/1.0/" rdf:about="">
<xmp:MetadataDate>2011-07-28T22:34:32+02:00</xmp:MetadataDate>
<xmp:CreateDate>2011-07-28T22:34:32+02:00</xmp:CreateDate>
</rdf:Description>
<rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
<dc:date>
<rdf:Seq>
<rdf:li>2011-07-28T22:34:32+02:00</rdf:li>
</rdf:Seq>
</dc:date>
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default">Welcome to Apache Lucene!</rdf:li>
</rdf:Alt>
</dc:title>
<dc:description>
<rdf:Alt>
<rdf:li xml:lang="x-default">Lucene</rdf:li>
</rdf:Alt>
</dc:description>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta><?xpacket end="r"?>

endstream
endobj
11 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 108.0 630.6 215.31601 641.4 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/java/)
/S /URI >>
/H /I

>>
endobj
13 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 108.0 587.4 171.0 598.2 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/solr/)
/S /URI >>
/H /I

>>
endobj
14 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 108.0 544.2 200.328 555.0 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/pylucene/)
/S /URI >>
/H /I

>>
endobj
15 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 342.08398 544.2 403.728 555.0 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/java/)
/S /URI >>
/H /I

>>
endobj
16 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 108.0 529.8 272.964 540.6 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/openrelevance/)
/S /URI >>
/H /I

>>
endobj
17 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 111.66 466.59998 252.3 477.4 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://www.apache.org)
/S /URI >>
/H /I

>>
endobj
18 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 167.29199 293.0 197.616 303.8 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://www.oracle.com/technetwork/java/javase/downloads/index.html)
/S /URI >>
/H /I

>>
endobj
19 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 239.988 249.80002 281.988 260.6 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7070134)
/S /URI >>
/H /I

>>
endobj
20 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 287.988 249.80002 329.988 260.6 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7044738)
/S /URI >>
/H /I

>>
endobj
21 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 335.988 249.80002 377.988 260.6 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7068051)
/S /URI >>
/H /I

>>
endobj
22 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 341.268 188.20001 416.592 199.0 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (https://issues.apache.org/jira/browse/LUCENE-3335)
/S /URI >>
/H /I

>>
endobj
23 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 327.288 159.40002 402.612 170.20001 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (https://issues.apache.org/jira/browse/LUCENE-3346)
/S /URI >>
/H /I

>>
endobj
24 0 obj
<< /Length 27 0 R /Filter /FlateDecode >>
stream
xœZYsÜ6~ׯà¾YUE‚wöaËë²
¹
Y±”x«¢<@
Ì
V<Æ<¤(¿~$ÐxhäµË @Ÿ_
Úw<ø{îÏ$#N^ž|?ñ‡1ßÉ`lú÷íÉÅâ¤nèÜnåc˜„č ÉÒØI\~ޖÎo¾±"¯Kvê¼qà_Wˋ·šïÕèç>gûÇ©ó§sûéäýíɯö¶qŽ¢ˆ‘Ò #ñ»»$‚K¼Ø;ßN*xïãÉÂèf
3]®äìáºpn`§A¦MH7HI–ÅŽ¸a Õ¹¦;)õ «~=ŒÜÞNëu¢uҁB£:ʐbcÏMIF¾³Ó‹f‰›$Äó'vÓ0
—|Wž¾ÛwÒxw$òå%ñ|O^Þ¢q-KßÔÛî‰6êöCÝWÚñºrÕÛE!¯†=ZuÃZÖ<²kúèשŸ|/Åø
ŸX]KÃ(‘¿í©Rä²]é}

<‡ð—p¥¦NÜí¸k$wõL3zN@Ü “;¯XfÜçŽJ²CSÿ—åJ¸
{dE}P"ÖV·ußäj~Ëh“ïՍ4ó™¼çU^ô^í~šÆçDž›d±çù£xw„Dò¥‹ ª#,Ü:ùétâ‚6òæ]-
®ì7®õÕHÀKÂ,ƒ$‹×#â%ì
1íÃ
1†EÒ¬›Úœ2Õ
-{÷f[7%kŠg9Pђm–$ÿDéÝ©²"˜[^m
ºk÷ü ÌÝߟKwM

:őëgQ*’À›|Ô+©±×ù=mQ^mØ_à3õ^µYr5/+YÕ
i¤D¥jõ'†
cíÁWù¬®fìy· z’¹‘aÄ=äd!òrI,ºy¤UŽâӊÏ-o/ºúUüïA>ù,§zÏ
ÞqÖºóÌ7Ë'þ`HN&N §hŽDaH7Da¹°' )Daê·/GŸxu*:F
ÇÜÅ0æTÙΔ€r\ʚCÃÛå
pØ(ç=ñN=øÏ/Ÿ/~¾½½^p&À£€!ϓH®]÷éæËÕÅõs·¯«‹¯ý½Ê‹·×—­(µ
õtKsÖ1;@Õ³
œ`¼Ú°CÁs­s!Y“l0ö 䆷]ÃïûµÕ¡|P‘5˜4
Û5V.<±{ŒÐ’«\K'au¡ÍR\úAbeòës:ӊÌëg:G02£Ó€,ˆxt‡ªTicüJšs¦*Í–¢œ"@TÀ֍
ˆz+/:T ¯æ&!ЁUM·ÿ±ºA"a½¨Ÿ¥cí€%$ɲÄ
Ù,Ö
[.£ /ÅEäLÂÛÁÇÅd¦_ ÈË˯¬`8\+rðʈ¥dÈ|ˆ˜”¸Y
z^dŽ‰sÎTÙõˆÂhÓ¨t°P^N#)¯‹fMÊÌ
, ´šp‹`¡'n¦ö))ä6§
’1É6oÇÚÅg ´‹^bš´"±æàÿ%žQN/t!ŠEÖÄÓóÔíQþIüp$Cфƒ®¥§âÏfý¨Øë+—]Oäe"‚2Š<jcŒ JsŽ-ªÌW“gµýÁÀ,íûnÙ-Ð4–}Å;U
14ê=Çh<-İɹm,™­ûrd¨×Tâü
Ûò
ë!–k‘4ô¾ÕïQ«Qµ¬j{µˆ$˜3éÃÀJjØJ`Ë°üÓÊPÿ
¤;H*ž/« e
¶Æ,×DÕh9¾ŒyÞ0ÈÓÓCúÞÓB»Co5S%J,Lèt‡W0ºQ†Ðn¢jQ$
¾å¬Ø`s:oqΖ
 ª¹ø@UúéÙ‰h£LõŒ¯©#ƒ~\ÃPþ܈Š¢ÞÕó°êºa%m
©ª˜?
]3Òxdq£ü/õù5Hª57=
LÀ0/ÑM÷ëkwP
Xƒ³×u“†šjx>äsìù’,ÏlX?U¬i_,IÜ4Ž¡ÖäÔ+öÔNÑ=Èë$p °kûKÇ
Qà†P¡\<‰Iåŧ
»\âùêñ¹üýíí׫˫?ÉÛKÑq"p4M0z6
ZyCÛ=â*&ͱ€áòbÁÒq
á_.3
ò©Á
D¯,/“™!ÑåÀy>“‰î;>8~L“¦vÚ54/”$‚#èî|¥p&‰K22[hYÞÕúˆ«dnœ%cê{‰ûC,ãG
¤9ǖh„Ü
}V ù[%±ë+À^Œlù Št”WÊåûºkµ~X
x9\CД²Ýog
žç„
1¡áiϱù*y+;U(_jȪFÁDª™ce¢Û­¼Þ`¢ªLo´ÌTáÎb©UÜÀÆ kä÷
>ýþ
bJ
¦rDÁ<Òi²Ø²äÔ(µ€4}ÑiýŠ¼/¨nµÂˆƒ¼Ù:ž>a¡ÓüKë}¿3³v¦Yà§=²õ¦ìÔÕ´;\íú³zí•ÔðÃÌÍҁÖM7J¼Äóƒð™a-½
ÐÄá¤0óçÃGrÜb‹sö²
Y²®G&Aú=ÌE´
$XPïe=¬)?¢ £u=âÔ§úǙ¼¹ˆ¡Gº Þ=ÒU³Þº³nÚ
[k§~k
Z

-åÙñtI«þ­I➇@ÛE2"—¤È‚µU&líiñ[–B2<ý2ðUO
±Òj!fh‡VŞ„\^$»Ú@
ž#ìQ¤uo­
võ|Ó·SoZeȨ÷}
KÌk¿&îÐQ@J]£¶|×7fjª´À,;
%ÝSätF
\c¨@:.›»?CÇÙ{Ý\~¼yÿñ÷—|î¹
‚óM¦6ŶÖdÌhc°%ê(¶·ùÜ t›:ï«ng_ êjÃ‡‰f¡›ÄÌAïÆš*Vçd9p
ì9Pó²Ä;£¨¬
ú.L‚ö~*ÕçßÞ½¿z
Aô¼2
ÝXT‹ãBäC6‡œSl‘¼4ûbô61ª¯Oór‰
͏&KåÏ®®0þÿ{3ô8
’O=¦‚ŽË5}õ`%ÆL~ÕÂ8‘Ðuè‹V‹#ÈYþOµÅŠTVhè{j54ká¡NÑLÃð ãׄ¹P$=ɒp8m&@´‰9xì¨YM°ÅÑ¥Î4fèYH|k 1Àý}ÁJý¹Ï8$êÌt5¸i¤Þ Ïx,ĶºGÓY\o·\ÄÃ

“S
וGZå«uÚS%EU/¨gwD~d¼{·[þ
W/–¡16ŒCÛe)i¥T/µ–&»UùzY¡Z@mõÙÊ¡¿Ý}ïÅñr‹ÅãY`béT€¿µ®ƒFbŠ/ôs€âF§¯‹Ï
π¤ä]¯œ!Ÿî{#Ÿ/¡ÿ{Åÿþ!V

endstream
endobj
12 0 obj
[
11 0 R
13 0 R
14 0 R
15 0 R
16 0 R
17 0 R
18 0 R
19 0 R
20 0 R
21 0 R
22 0 R
23 0 R
]
endobj
10 0 obj
<<
  /Resources 3 0 R
  /Type /Page
  /MediaBox [0 0 612 792]
  /BleedBox [0 0 612 792]
  /TrimBox [0 0 612 792]
  /Parent 1 0 R
  /Annots 12 0 R
  /Contents 24 0 R
>>

endobj
25 0 obj
2596
endobj
26 0 obj
1082
endobj
27 0 obj
2535
endobj
29 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 126.324005 671.4 168.0 682.2 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2011-July/005971.html)
/S /URI >>
/H /I

>>
endobj
31 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 250.284 406.2 492.576 417.0 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://www.apache.org/dyn/closer.cgi/lucene/java/)
/S /URI >>
/H /I

>>
endobj
32 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 211.968 391.80002 452.268 402.6 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://www.apache.org/dyn/closer.cgi/lucene/solr/)
/S /URI >>
/H /I

>>
endobj
33 0 obj
<< /Length 34 0 R /Filter /FlateDecode >>
stream
xœ­Y[sÛ6~÷¯`úR{º¢x¿ø͛ÄY§qëZjәºÓIHĆ"X´’ýõ{@^¤dg6™ØtppÎwîˆk9ðwå8õ¬ìpñ÷
Ûí¹V
{ÝÖ?·ë[ÏJìÀÚáˆxväyiY±íÂÏíÁúãò#.3zÀWÖ¥ÿ8
75Ê
¹û¡Íp
_]YZÛ÷o·¿Œ¯’ Eì
¬ ¿Ëþ·í
°T‹ÂúxQÝ»‹?þ„ݼß?Š“¶
«át·.­
ÜÔiãδ <ßö/M#ËõíÀÔy@ûAêNVM
„¶ÔI<"÷µNZ#P¨WG).vìċƒÐµöšiÛqì9ŽoEv=Ë×´þÂȾàxO^èKÏqa¹UàŽÞÐ
?"&?ÞÒ¶Ê'´²%uY«îŽF~À
f/8·Mý2µ“ë$B1¡ƒØH‡qh‡išÆ‘Å°µSûnšÚð¾è÷;(BËõ:,L

:å[÷ƒD
6íЋÀŒc~ö
Ç5ó‚Hˆ”Z™þü£á5¾
¿Ñl\×ߊ¹tZp 3®~º²
y×·ñpD‘'± v
Ï<µ5ƨ’ë/´
Vª**]¡mÞ‡×zCK6ì
 /†å{ô‚†e¬Œ]bÔàfêãŽå¶/E{Æ;ª
é×ÜH~ð^)-ٖ¡&Žpi“—8u·›)—Siíº“HmWßK•i«aùÜî•5e¼‘‡‰$VXjȸB ²ÔpŽYóý°³CmÉ_IDù
?±ca2·×BÈ(ùæ¤AÏ¥ä]RZ+99ÿtA'ÅiRí§
¦S!Èmß15½õûï׫_ün{`8'Yg“S¦ðCÏýÈqÝ)£Î/~»7$¦d•À;§€„>u'ZLJ‘æ“„¾Êñg
4cmÇ´±•xÑT<¨6.¤-Ճép=¾>­[˜ÚQèM9ô ®‘*®ébÒ*:M¢Ýg
çÊ¡vÚX_f±G+µÒtT}=V¸éG%}.èä>$+¦RÊ#¤dÊA[k¬(²£ 199%îÕðã\ƘT7Ç]t\Ÿ÷U7
 %ÖєµðÕ~îco8ƒxM+pØ3þfqšºKrRv^pt8í§éLK!ÊÜ®ãˆüä8CÙýáf¿‡*ؐ
b7§ÅEpzØ^àƒXIz’»Y’j8£Õ¾”ˆ3,2†8’Æ0²˜tií
¨’
ʛšrÃédþ‘A9€j!ï%Ռ
)/ ÝљBþ8øE¡­¼æ¸àI‰qÃÁæ¯ø„"hCa¨
)N¦£_—ˆ¶Þ3”ÏÚK³ªÉ¨eø€ÏXÖ@^ >cw@
5ô2ãÊp—Æ$CÔ(V’´­HFs¼ U4v:co‚Ôµ²ëùꜨÚ+ZTåJÊO¸ö
-¤”94ÆpŕK=]b{/;¿’
1ŒÁ*]¯2Ó >
ªÖäVFÜåA÷¤‚¦àÐÉ aGùW²xNø¢œ^òþñí_¿½}ÜÜýüÓ_÷wï
o¶°²ùçsiÂܶ§ÜFÞ
Fg
ˆ5òÜòeÇNƒ¾:†=h­>Á ›
 ‚yRº<²
dYy|ÛúûV™*ºÜ]]™-ÛðáµÆf’™á¾N}óým߁È
·oË=ßLàOÐõá~¢ 9½¯÷á^ààÜN:ÌáÃÃýëi*ëÛ7í©J‡
Lřâ‡zéII¸IÕÒ
Öö
8’zÖɆQŸ~{UÆ.x¿sŒ
Nà}t14á*â¤KÑcUR¤“õŽÑƒóÅ
å%]L/+8¯¯×ëãñh£N›²ý:ÿR­³
fg{².û.ÿ߀Ýú›Ñu‘
¤±Üa<v +ŒÃ4IÍýó“ÎèÌXô%Wa›¤}›6”Âÿœžk§Q"î”ÿÿgœÆu)Ìò0一¦y¶'¶Ccû<˜“N<ªÿ‚I¼4§q£¯\
„a€S99+Û
/ô8¾úÉóÂ)•›ÌÈtÜ75.K0û„u1ÈÛRwéDZª·i÷{èÖ¨åt}
$5>î %ˆLŒDôË*bÔD^0<‹h!fà˜!MSè—x?j]«ŠÚ -ùn1«“IfËVÕ]yí-©ˆ’nüðB‚ðñãŸÂrB¶ik1«JÕuMÅl¯‡Bh<¡Ù–àiß¿<À6©ÞMX®æ^Íí™*ô¾«D.¿“'0bb¶˜
ƒf,ÂÓå–ÖohÖØBPüt%A“G¬
’ÔޞÑVw9c†‹#pB!}k.lâ"æérÓéõNœïET§u·«$_²eš|S\LÈndÚzl¥êاAüã†ãƒòºáw £†ÜRƒ‡´ÐTÀi+¿
i43c:VàzfdœPgBµÜK¼ªQÓ,[cQ«g£Îë͒fò! §Y+©¼
5ð\°BàÅßQS²»CÍèK'˜êÏeÃqê7&)N™n‚u–Búq@;á0êžÓšaÞ²j4%Ïå
ÜQ@Ýn”$¶ñŠ¥xFÁêY½\} UûyÑWƒp<XœBiBöÓãö
UÐÆJçi„bdGTŠ†1#/µµ+¨ôòå
|[yâ=¦)zš–L2‘¾Q>õBÆã~
•0”,åTƒ¬Zz—Êhs³Ì=æˉt5IØÍQêuµUOwªéx!
Ñoxꆁç\ú$0ãg¤4÷Pïš%v/á_wó ÙöH
¶×ݳå–*•w(}3T)Õ}c&¦2­:º2ÌFm`Ò]ø‘®êÂãþatÉ^!ŒZ¦K÷E^ßs'ÿÈ x²ÅCO´9aŸ÷Ü)ÙöD`vé\jLÁ=Tï°%0öæ÷âû‡Ñ
*M‘
 ;^P ÁX“¯—„›ŒD{ÌqV"rxƒEKÓ|Ä¢qSõñ„›:©d¯ÆC•8
TRkðÞÌqFôåâêŗE!q7øDŽ7L¦ºÍ1^ÇzòœU!^mºñ_Ó'Â%ËÇn÷T”œwù)ÙϝCm öÅ;½‚TÁ؈o”I¥tæÓ³N
ÉW5%ª
ßÃè?¹þ
=­ÿ’
endstream
endobj
30 0 obj
[
29 0 R
31 0 R
32 0 R
]
endobj
28 0 obj
<<
  /Resources 3 0 R
  /Type /Page
  /MediaBox [0 0 612 792]
  /BleedBox [0 0 612 792]
  /TrimBox [0 0 612 792]
  /Parent 1 0 R
  /Annots 30 0 R
  /Contents 33 0 R
>>

endobj
34 0 obj
2351
endobj
36 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 482.916 581.0 511.59598 591.8 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://s.apache.org/merging)
/S /URI >>
/H /I

>>
endobj
38 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 108.0 566.6 211.308 577.4 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://s.apache.org/merging)
/S /URI >>
/H /I

>>
endobj
39 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 250.284 457.4 492.576 468.2 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://www.apache.org/dyn/closer.cgi/lucene/java/)
/S /URI >>
/H /I

>>
endobj
40 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 211.968 443.0 452.268 453.8 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://www.apache.org/dyn/closer.cgi/lucene/solr/)
/S /URI >>
/H /I

>>
endobj
41 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 324.972 219.0 456.96002 229.79999 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://s.apache.org/merging)
/S /URI >>
/H /I

>>
endobj
42 0 obj
<< /Length 43 0 R /Filter /FlateDecode >>
stream
xœ­YKwÛ¶ÞûW°«&çÄß"»sºuÛô¦‰z²¨»€HˆB,RÜ_ ñ")Õ÷žÆ'™of¾À¾ãÁÏ­¿¶YàäÕÍ_7¾˜ó
æÄÔ·»›ÍCà¤näìÓcx%Œ7 ‚,Mœ­ëÃï]åüþê¦9«ðkç•ÿ{6
î”åìÏCŽküÕkçg÷ãÍw»›_ím“4Uá3•Åü“ŽŸnÃP
ŽÎ§›便ùý˜-Æù3Óõa4½-ÆÔù; kü
5QºadYâø¡
“9ïQ9i-tÕâQì† n-ñHÛ¤-ƒFs$|cÏMƒmûN©Ͷîvx^è$nEã’÷¬ynIyì'ðž‚ØŸ†ç{Óp§ÀµþÈýµòëêõ„Õ®”¦t‰=:ùw¸=áÂ5}ôëÜO¾—rø
|Ž#
G‘»Í—Ôi±sPó~4M
bǦõž“¹
~aõ 
55bR†q´UúRŒ:ù€Ô9

üÍÜiž¤n(·x
‚x.᧖È÷-R—Óº #Á´˜Æ÷ŒRÔtBh¾$È6K<Ï¿ºáLênZ¸Æç7Ó
=«PÏêÛ=)wÄ]¿áO!åŠ{ÿVẾV
p«Aj¾-pk ¼P0†ôÎbpê¨`
ʚô€¯Ô£B”ª>ܽ›F9«»¡j¦h›c³õÝøŸ±™Iýô±ÇÕ¡=nPÞ³öùÍÂØ°"+”.@!_›>)îd ¡²„èïÈIÙ{VʾkWôLc
ºžŒz~W—”tdz}ÏãáåyÑU»çbF¨ø€ªòB1¬4ň›Š©ÌLJÉ À áVÛ«†Q’?Kzyµ#¸ÅÅ;.ð^<yz-Ùâ#6ÉpäÖHá0
Ü̏³4^Xpìûæ›ÍFóÉøöƒ¸Ã æÔm-â»I|’r"¦`HÍyNê§X0úœb.'”è\$ØÑem¹áè´½¦‘X)q=¡†j„
ç85¹ÐÁâ5ë[Psw‘¦+t!wü ³2òRÍÄ
«†µ=R1°Êù‚»7jSN›š!ð—¾
Ô¡24ŽÀNj,:U!a™2
¦pÎ?ÃjkD!¸4
¯0ûvRX弑ä-;‰4—-«.÷
Ó(ùÓ¶›‡¼cŨ™dn,cXˆ‹£éóÇA­ÅXÖåÛµ½îµwC7X˜`d¸~|wB„¢=Å:HÇbë§>¸þmEu
“Ð
Äð¼äŸ‹¬ŸùVTìÖ¡yÿî^‚+!mD•
kâ©kh+rÕò©õШ=¡¤—!¤ˆ÷šO–àHéE9÷b+@lW/€.Ï$jkç\‘½œ*ع¦
Êj
V(ÐO MCî™ùfžÏg“†Šçz“Sý–›—dC
F›?¼—¥µ]ìB7ΣÈÒ
Üx
$š™ó׉ÊzÇV}-V؆¼sŠU
÷ïÀ ä™%)Wd¾þÿg¿Ns»Lמ0 ܀ÏÇæüu8‘8éþå=­/îj·1¤tâùכŠ¹˜ÑiN£Òîw+V
ËòGÕM°B‹×·d¿‘ïIQ\sҒfvµùQÙÔ­u/ûEv‹V<“_(,¶Q±³—¤";ބS|{BtÐí(ýE‡ÛظÏñ
=;Ú/à7[â÷Èwû­)[¤¡ê“G¬Ã@U1èN¸íu-“1A-Õç8éHɇ¶ÕýÜØ.¬0^èÛYsɶ™ØÒ¶·¤Å¢å–êYµôü/v÷‹à %/å<GULðCƒŠÒ¬Ü¼‹Xêf*Aÿñf
4­ÃJzÜüG-0†Kß4Ðã
¤gÒËh= ®×–©Xƒ¥¿ZÔãn
÷hû’œœ‹-qçLäUÜ'Е°êéT€‰.ÂF¬D“\×ÊÒ#áîXj›øVB>£çC¥Ãðñí²9câˆtè#ÚI
º
º¢îéõâ%PL!ŒŠžõ|%O#»£²N
†C–™^^±µk
3EJGÔ«½ÿˆêÛú³Ô{­goP×á±Acj„åÄ~kñ’y/ÊәأA’g>ÙS–Vðhv¯~j
¦¿–jë°CEñvZ§›=4D½ñxy§áEfºV¸?²¢ÓŽÃªªá/
n‰ˆg鶻÷rK\wƒ†_ûE§·iª§ÅLó3¡FLà^‹‹ÈϬT„³R'^éH9°Ád©™*‚°­¨Á&5ÀŒ»^Ï
†^›vÀˆ“‹SòY>™•d‘!KÕÃÐÊË?©×‚,¶yA¡›‹-Iiº„I°¸L(,îäƒó‘(²QÉ{å¾¢ìµÇ+—n\{èÕÌYc>SãšÕ·
÷ʚôқ ŒÜl,6ŸšÔÿóâA¯š½hâŠó›oÎ_ïE­wl
írXà
m«±³µšÙK¡cKýiܼؒ0UÞ®™Œ¦CðתKƒšÀ[U/κ<³A¦ˆ.æªÿW‹ÌH𠈟8˜/»T[
Šuîë}@LNx¾WÍû-É)¦y{”VA® ÍõÉôM4«šcxK¨/x{~]+nßæΈÅÁ×(Äëޘ‹½Åü’XÕXÜVª\·:
T ୑t0.tèŽúëJ{

(¤µYcj]b‚¥>ÿ»@Ìó`,&—Y*„Œ”#:­èG¡n©Fª&=A”ü­î+”ˍö]§†Q~&Ö
Ùõùßü;†ø#Ìãã¬(
endstream
endobj
37 0 obj
[
36 0 R
38 0 R
39 0 R
40 0 R
41 0 R
]
endobj
35 0 obj
<<
  /Resources 3 0 R
  /Type /Page
  /MediaBox [0 0 612 792]
  /BleedBox [0 0 612 792]
  /TrimBox [0 0 612 792]
  /Parent 1 0 R
  /Annots 37 0 R
  /Contents 42 0 R
>>

endobj
43 0 obj
2072
endobj
45 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 250.284 418.2 492.576 429.0 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://www.apache.org/dyn/closer.cgi/lucene/java/)
/S /URI >>
/H /I

>>
endobj
47 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 211.968 403.80002 452.268 414.6 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://www.apache.org/dyn/closer.cgi/lucene/solr/)
/S /URI >>
/H /I

>>
endobj
48 0 obj
<< /Length 49 0 R /Filter /FlateDecode >>
stream
xœ­YÛrÛ¶}÷W°O'ži(^E2yrܦ':u"u2g¢<@$(! $-«_ß
’¸ðb՝9ÉĦ €{íµïˆk9ð÷µ
?¢Ä³ÒâêÏ+·[s­Öº¥wÛ«Õ{ϊíÀÚæÃ×pÄ<{íyI¼¶"Û
ŸÛÂúúê
¦)+ðµõʂ

n*”
åêomŠKüõõÍÚþzõóöêÓXì:z(b¥°‚Pü¦ýoÛ
áQ=
­/W%ìûåêë7XÍúõ“8i»ð4œîž©µI6îL›Àóm?ö’dm¹¾
øƒ:÷è0 î°êíAhû°;ŽFÛC­“ÖêՑD
ÁŽ
{QºÖA¿4‰ì(ò
Ç·Öv
ý+oYuæäplòv^菞ã:ÃãV‘;bzÃò愸üøžµe†ÂJ[î¦txêdÔò®1ęmÚèÓÔN®
ńbM0
®};L’$Z[
[¹ZwAn¡ã ´\¯#ÁÔÞ±[Ðßi½ó¼pʹ›;nö„’æ<u´ºÂ)Éå2{ÄüÄI# @e6<“¤ùBš#)å—Zû?[\KÂ+ÄQÌåק#–Gښ” A°>Cì¶/!ÿºùý£<X
$ªœñ5öô´cù±
%kÇq/’2ٵżøt8Xðž¶Rþ¨Àâ¼¥s%Œ
¼Bi’
ê€
N°Ô=笐ú‚
ÍXÓògó]9Á4[
ú¶›OéAç(ÅÆMRgâÀx+q¹ÄÙ:üGÎ&»~Âûöp+ß:H)ÙI:U[UŒ«è0­Ž†ßÁG²ßˆòåË°$ý秊¢²
@©èþ;NՋ•+±4
»Âý
ÇëACÞëÓuƒ‘´ËçBí†màxKÖÂQ

€ã]ŠŠCŒ@Z=U\›îw7³¼Eœ³ÆSØ|à
Èzœë:àãà.ñEtÓmÿ
œFE^Óöª0ï­L%:bè°$Ú
GžúœèÉ6©p‰äu.2ȉñ‡añ;’þ+OǨ>gŒX†Ü0ª6?5¸¬Ÿ#ËOÀ¹ŠñdÛ»ö“'åMÚRdnd#À*ûðÁ·=‰nõÞãŒ
.à\‡và:ʙ ŽÊ“²ÂÝ!ž
¯Uµ“˯—ÄÝ2®%»3-
öô×7ˆP´§X×¹¾š¹ô4‰(d]ùòcá÷ðçU̍£‘'l—Ù¹¿»•üJV+
N ’¨
$T–P·•¿ê¸B=z³*g¹d–99r÷ԕ€ó‘ŒI”M„ÖÊm­“[Ù{<÷ôEKœTõM¬VµI‘ÀqN!SÎ8(0—
šV>Ϙ²ªèrùL'7
¥Ñô#žd½<
‰r>e£´å
^K%áˆÖ¢ÒÛ æf”UÆ¡ËÔë%lüT-ifÐ4¦Up2SÊwÀACÕ
íçÞR#Ֆ+®›eäÙs$Ú`)+%ç¥.Fæ29î
^nÍuÓÑKœ)}§öJºvÐ1=Û·ÍÅÚq‡Ä2–"É£â(c§’2”-ô/Ý«û†—Qî®aΈ}‘
¦ÂŽMS½Y­N§“º¨²?¬²s¹J)86·ÓYÑÑê;DðJ§ž^Îgc–ñ½PL3#q
$‘˜º`¶q<;ŒÂ$NÌu1ç<Ÿ FgÆЗæŒÛh蜆ûÿ¡ÓƒÎf
‹œ¾ÿßÐYâÑiŠ‹í8‰¡,,íٞXåËdÉ8›¨–Cº»JJÏÄÚ8H™Ò6Ãof7EøsÃÀdÛÇ2$kU‰¹Øþ¼‘CµŽEü„Tvº?rÀú F‚óÛ%á^Ü÷_½l‘›ô‡
™š¡j|0û #C·Œ»6ð­„ÌI¸Ì·X>QÆ
Újš]zè‹à‚±·(3üôE
‡ÜFYÖ}ÄõîÕO„C:füüõÛîzxk«»lŽT*Ñ\Ùm±÷
ª<"N´-” %°á8
.Ûí­L«"؀ªøÈAIUl4¹±\B×õš"]b¥Ý ŽÆó
›JHgU%eb}}A‘qVUL©õ‚a]j9òΦ´=R·0èÐó_zVßé™J,Nö»ëEì]ƒ§Ã斕C¥¿
ÆOÖR%UÑYè¦35ô|ö¬m”º9€ð
ŽÍìdš#oZjîÇ1Cì™,0Ùõ·µèrovÞé„S =@JÀˆÒÕhÁZulË
p ³$FÆPÎ
?Óój7
ÅÞs°'ۆñRu©~­[1(]óK°Ê\“”$
ù[Ú¡ãeÖçZm˜ñæ@nëM<Çê%£Í9Áe¦£
s9!
¡¦R-f÷êöˆ¸¸¥¹i„C¶
Þ]Ka#æûˁöu‘ÞƒkéXèõ3x² ¤@WBc0¥f³ë¨´z8–× ¦1c
ÛÙ3BˆàÑõîzÉ
Âø%µlº
‚²nPÙlÀÕú"4Ó75 ØIå:Ò;¤T£ªšßÜt/Zy/‰´ñ.£¨LS
 ™('‡–kÒuù“¨J¬.Ÿ°¸T—
û–ÐL½ýæþƒt
Côm'`¦“€Û
§:ÂþÇZMåІ3:ðÕOpü(Jš"Y\!¨–¿„­³£¤&]Š*ÝìÏ
íe~]Ø
¢:Ú ¥Þ¡§m÷ÆMì,åÊ°›ôÂ$ò.špºÍl
¸ù
"æÖ丢(Uª*ºÃý›U¸Ü™¯ë‚aØ&íeĸ<
{,\–Ž§»%[/¾OG
ý¦DÝW_Õ{
YKuQ
Aû¬3§q?|V>"R)hxøøy«ÞÐi½`‡anó.ßÉN·Ýµ´!,®€æüg\/Ãg²-¸‡(¡Ó¥cG5ñî±Va_3¾WO²8ïlÎ ä»Ý‰Í.RJýwÉß/ø¾Ê
endstream
endobj
46 0 obj
[
45 0 R
47 0 R
]
endobj
44 0 obj
<<
  /Resources 3 0 R
  /Type /Page
  /MediaBox [0 0 612 792]
  /BleedBox [0 0 612 792]
  /TrimBox [0 0 612 792]
  /Parent 1 0 R
  /Annots 46 0 R
  /Contents 48 0 R
>>

endobj
49 0 obj
2172
endobj
51 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 108.0 278.6 132.0 289.4 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/java/2_9_4/)
/S /URI >>
/H /I

>>
endobj
53 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 108.0 264.2 132.0 275.0 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/java/3_0_3/)
/S /URI >>
/H /I

>>
endobj
54 0 obj
<< /Length 55 0 R /Filter /FlateDecode >>
stream
xœXYwÓ8~ï¯ð<
œÓº¶¼óV

à°'ÀåA±•Dƒ·‘å´Ì¯Ÿ+[‹·´aè!‘•+ß{¿»Ëµ
ø»pá#J•gÿœ¹Ýžk%°×m=_Ÿ]Þ +¶}k½•?ÃÏGvˆP‡Vd»ð¹.¬ïO¾‘<­
òÔzbÁ^ÉÅUÓ½Ú}Û¦¤$<µ~Xë7g/×gŸÆlÃØïE;
åâ;ï¿mÀR/öÖ·³èþ:ûþv³~ÿNœ´]XÉÓÝ:·VÀ©ÓƝiã#Ïöb”$¡åz¶ïIu>❔º“Րûíu
ÈC£“ÑêÕQ@
Ǝ
£È\kg^šDv!Çñ¬ÐŽ}¿åuUÿbt·ç¼[¸r‰
ב˵w„ôªÚò;ÌÔãMՖæ´*mEçrÕñhÔi;Ì
ÚèÓÔN®
ńbO

%€Kl1bmõ¾ç»6h渨ßï ,xX
Ap¬ÄV蔿E(˜BïÆCŠ¥9ô7Taô–Yu§”Áe¦áÈ1£jÿÍ×w͹\¿{‡ë”‘”Wì—Üӄeu§üY#›‘-nsŐuN
Rò܉‘o{Z)€—·¬$J¬âx³Ò2ØUMÊÛ§öòá¼QáEJ¼É‰’·-
\×´Ü)é¶3ñA÷)½Œ‚•zA›¶®+¦‚r{z
îÙn€Å4؄ê=Q€®+ŽóW”_ƒgÂGžwÊÿnp*~W‚pqHÙ¦-6D
¨”¢{ʛaÃÈú
vBõ™àŒ°ZÒfO²·´á¼Ç«¯M@î9a¥–21iÄWDšr}œ3ªIª2U–Âò»!;á`ߜ
»".
õ‚o¥È
@¸þè82ɼ‚àχ  š»
Òš‘œàFý@Ë4o3òl
Ùì
?ø”ì}[FSÅ
—*?Ùâ”hoŸ4´ ÑS\!ō@$t‘4Ï
NqÞ)™ñÞ¦†x×Fnféþ|„Š Â1í–æà ð«"ßTUÃ
µÉY
D ÙOq74§
|eI#?ßQ½‡5š½¼Ç"I
_I^¥”«4“1z åHGùðEù>Vn¹ç¼~vy çq¾
žÅIì]6à9—™,ˆ
z#¯=&ò„ìJÅ¿6àY
ºôq±çTøí•k‹˜1bˆƒà±z3%{ Ñ­
”ѦÀ÷Ú'Iÿ|ûTîüӝ±k̝:îöT#‰³
Jn£ã¿1-TA›ÆØK0”MG•]º0Ë >¡½Ü#Q
†óJó»£|?—Id·²J·äƒÈ‰N‰ª)ي
ÓñQTºiv²®JbÒ¿)Dz@C@Ý´\Û¾¨º´ÔWpæZ½ë|I"䎢bU“<¿Þ“ô§>¶¤.d‡üwJ6÷ß«V'°U»Û‘Aí{€;ô['8ð”ìªË!ÊúšocÀÔ=ɶ-S~ÌÔ¡ß'©Þ¬>¼W«ÒvXÔʌ܃¯/qŠð–Ðqý‡YMÈ®W_uÉjD]³¶+ð" ‰×Wÿ‡K֔lÔuyýîJ«ÄɎɮPqVÞI8†R¥
<élΧby-'xٔìmT;/úÉK>@O6«6”ÿir˞0cœªæPmÿíT™w֛Vg(z¯Ùaµ¸#zÎÐ{çÏ5@hä©š¨_nÅ©žžàª®Ý¨Z­wQ³êÐuóz<˜¨w>Ó„ŽìòƳ\w4f‚ˆ!ŒÍô:2'ƒ){Èï$%ƒ¦v0å],™ñ
>(òló™lÈNl_í
0tL›\U
ìúñ͋Ąÿün^s£P=>:¯y±?2ÙóJ×
Ù(6<èr
ë˃ÖØX|¸+6

¦ï #ï§T¶Y~B.‘QHôG>î<ˆÛ„î¤o; Œ¶HÜ) á³¸W8ŽOG;âªú÷Q{€tÆýµÉ|r
2÷d«w@=§ÆS‡
‘NEƒs®í/„“ïFDzî2¼zé'áëƶxÆ¡Ä×<?Žï„m×öé<c@k°î`F-W9$Ë\ÿ>œ´~Û
Þÿ4C°d/•3~´ðòÙÀ6É\ýàì@
o]ñ[íe2È2‰QÜ4+™ÀªªÇI’¤Ø¼O_ÆKàå‚ñ̚‚ã—ê
üWM.¼ÕW[_›ÔIg¾,w9ë½6Þ8¢Òªä˜ê2VŽ
À‘Zfjä @(+S3°‹¤¢ »
À‰f='H
Z#=3>Ójs5Ç;¥š’)+HaŸJ-i{É8™2v!ã
š½÷µèÚ¾1j¬©Ýسã‰Idz¾ï}`NgÌçwb[F`R)ÍpAùìöPq£S·)Ö¦Öóï
L­~ 7°Cªf4ãrF‰oÇâ¼?;ßõP{=
—0
_0‚ó
è:”¤¬»§Òîª#_\$jXûyná~N„aD*
ÅÈÑj€Ó7Îò¡¿óʌᇧŒ%S2e
f¤ïfm{ÆÚzÐK§&¤õ
LÊ`ÛVtæû?
câ
endstream
endobj
52 0 obj
[
51 0 R
53 0 R
]
endobj
50 0 obj
<<
  /Resources 3 0 R
  /Type /Page
  /MediaBox [0 0 612 792]
  /BleedBox [0 0 612 792]
  /TrimBox [0 0 612 792]
  /Parent 1 0 R
  /Annots 52 0 R
  /Contents 54 0 R
>>

endobj
55 0 obj
1911
endobj
57 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 110.328 575.0 193.992 585.8 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/java/3_0_3/changes/Changes.html)
/S /URI >>
/H /I

>>
endobj
59 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 217.32 575.0 300.984 585.8 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/java/2_9_4/changes/Changes.html)
/S /URI >>
/H /I

>>
endobj
60 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 158.664 560.744 181.32 571.316 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://www.apache.org/dyn/closer.cgi/lucene/java/)
/S /URI >>
/H /I

>>
endobj
61 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 329.268 560.6 349.92 571.4 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://repo1.maven.org/maven2/org/apache/lucene/)
/S /URI >>
/H /I

>>
endobj
62 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 378.276 513.0 425.604 523.8 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://www.apache.org/dyn/closer.cgi/lucene/solr/)
/S /URI >>
/H /I

>>
endobj
63 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 127.992004 465.8 189.636 476.6 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://svn.apache.org/repos/asf/lucene/solr/tags/release-1.4.1/CHANGES.txt)
/S /URI >>
/H /I

>>
endobj
64 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 108.0 399.80002 132.0 410.6 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/java/2_9_3/)
/S /URI >>
/H /I

>>
endobj
65 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 108.0 385.40002 132.0 396.2 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/java/3_0_2/)
/S /URI >>
/H /I

>>
endobj
66 0 obj
<< /Length 67 0 R /Filter /FlateDecode >>
stream
xœÕZKsÜ6¾ëW07ik
à;{’³VV.[eKJ¼Uqj
"13¬pˆ #iý6@ ’3Îmí²ÄÁ Ý_¿AcÇ
¿o0üˆâ¤û‹?/°\ÃNkréÝãÅÛâÄÈw
7ý×@âù
„$qèDÃÏǽóÛåWV¤|Ï®œKþ5¼¸>Ðt§V?¶)+ÙWÎïÎ㇋÷_Ædž±ß‰"VöŽˆßE÷‘
õÃÎùzQ¾Ÿ/~û
V³nýYP"
O=µ|.œ8Ijƒ-m|â!/&I:ØC¾×«ó™n{©¥¬Ãv?@
쎣ÑöhÐiÐêÔQ@Šƒ]“È°³
˜&Š"⺞¢Ø÷;–?ñÃk•owMÞ7àþ‘¸Øí5¸#¤ø¦y¦•úxÃÛ2£MÎK¤vEÿ$ϨÕV³êÈ2dÚèËÔN؍
bB±&.&NŜ^üNàOÔ­K(X–X˜ ¸N‚„¤òß zÞÞ$ýv½ÇæÞ»vϪ<½§å–}iYõª ‹Ðw‘'¤ñMBñ·†±çNôyA±²pòM^4¬Z>šD ò‡dzt
aÓä{6Ø i«2/·ýç¼LyU±´™ú"À@|Чç¶k
mÉç¼ÙõOÂúj½d´:¡«¡$Ž]7±ÿÈË-út{÷Ÿ_¯?þò~EQ/FQ
 ŒMrq6-³õ£IHƁðûèëŸ:ÚuÄÙInh¹‘‰ÚdבV9o@Í®b´—ó²¦Ö¼*CÔu+¬4æ¾ï‹KË®
:ÙÕåBÐ(A~ÿœÒR™Š?÷O´¨¹ö-\^fìE»M
ß4L}÷¤„ö‹^l™#ï¸ö–ŠŒÖšíD6mQ(®êOž
õ¥ánÎBÒoë/³Á›;hYUCZªU^úªh릫¯¶èq$âÇu‰r{fϔk]¶‡mEu)2AÎ7ýÃ+o-EÛz D/ÿP[ô!š©€×û^¦Ò&ÈÖ
»¡pz×íKÀ3kP—~+#e8ò
¸Ô”Òë§]ßýüþaÈè
£{£tz$ÅÓä¡0Ç*)v=@
‹¨4ÖEU]Îæ#š±lv&°5Ã$Q,Rӄ童™:ìB’óD–:[§­Ó†÷‰õ2c
Í
åÓ}¶Šìd#ύ]l³{——´zµ¼®æm•*‡Êr‘ü©U}&)a0f$òMܱ

A8ªCwÁ \ú"AL9í˜`µ‚ºù‰ÀÝdAKdºÙ; –Ö–4êÑ
êjûX´\Ž@hþ‰
Y©#³É74mì<w
>ÄKXÐuƒï¨6“€ÑùeÝ4RØӋ'œÒ$X¾ÓJ‰ý
ØÕÀC¡JyAÿð¡

ÔÐq¾¹R-f¡ü
#©Þô¾+Ù@×&â V­—è
CŒD-QO¶
XĉP«ïÞQeÊ'¦­\ii&¡”ë~h(²c»ñ|hŸŠ<]w‡8F$’î<•7ãÏeÁivŽK˜\’![AãˆB×ùÁX_wŒÍX¢ÖM¨±¡
Ðv;“`bÒuQAÇt“¿ŒA·`
ʤȻ&
ht‹6ӝǞ–¯6¥”¥cœ͏¶ý3Ӄ^µZóô›ŠïgT„ÁlµgófŠ8Á¸6y“">4F
>$únʏ1¢%otºæM&?,
ӈÁ8òdÿd,¯û’I2–llá=×Yt¨Ë9ˆøà"é®%RþŸ•ƒFù|54XĊyi1;ØÇyŠÈ>]¬"Oyj ]ËP$4¡¨ä'ºé!HÀÕb®²ÕÐ9/tÉ?θ[Œ»N>¶¦™¶*¶ö÷ œn¢)w‰e÷‰ñqÝyäÖñ¡KYæti&—I¶í R<jÎYýwÅÞ¨¼´éDœ7 FÓÆIx'û{O<
^È6ð„hèð
>Ÿxrì¸  Õt?›û§‚
Y¡¿×yY{ïw˜Áû‹ffŒàápT¿î˜ªÙ-0WÒñ͜HF_—
óál=ÁµÚËú(›É!ƒâ¥>:XñLžÍ 
KéÀ/W– 3Êy}×Ö閂ߗŠ_óz`oÄ
Dÿùúó-Z
(€—ŸŒÑíþÀ«†–Ú’ûCŏLÊ<“|´ä“¬Õæ—{n8:Œ–òÐèêe²íŠ°2ɞAýP%øc*ãò•˜bq:å+îH¾VùúÝ

v±
“
ÅN7“­¶º¼ñ´5a
ܬ»•ÉÔ
ƭ¾»Ã™¹‹Â£Èm؇ִÞÿY˜œ3áɪ½vê´á:FŒYV5ËMΊl2¯Z({ž˜ˆ%ñYûÐ7Ä0 ÌÐkUml’q܏ÝrIN4›öF¨hü¹Ûa
ˆ¸þH,j
¿EW
0ð
ü”Ç=£ÙD×$’ãÛÒñ:9¥¯ÙL¦„nÊL&'¯Ñ'ûïh“ÙÍÃGžþqC
ã¬]¦>‚˜Q7acuçÃØe$ !÷£Rÿ,
I
ˆ¡Urg/);42M[þâ˗
CúãiÚVç&‘ÐGa џ²9ËÁ±ï¡8%zi0„só’sÒætÛm‡£ò^‚¢+S•T-\Θ!J„¶¾ÍZh{ÊWÅä€
¶¡E¯j«,Íépg<Óæ‚à
{i&Bï(ÄuwñF¼
™%ð&7ÁBèY”'ðʓmw³r¨Ïâ,¥,?@Ç¡œüy—.æðObÎ]‰ßäPše·ÝÅþßÖÞ&EHdªØzÔ±Um)Þ$)1KÕô¼Ü2=µåµÚ_óy¤å¬¯ã»f[ÁÒrd
| éɶϬ‚꿾Þ\iUA
Cqù(ò·ÅŸVà‰¬øÔMþfMwkîíah§Ðâ$ù6jyY¼~»šÁ"À‹£Ù|6žH?8--Æú2mÊaÙèÍ®âÏ'*©ð҄x†)ã;¶•µâºªèëCþ_ö~’—çP!ivÞ¬œ3¯O´®×#bî ’H÷"

ÏyYh¼
žr‘5ë6.ÑSòòŸ<­×ê<Y¢

&µ4¼núš
Ïæ".ðǽÂÿÓ«<¨ ò‘à¿ð.ï»_»ó.|/ÓÑ»<ùß%þáóá
endstream
endobj
58 0 obj
[
57 0 R
59 0 R
60 0 R
61 0 R
62 0 R
63 0 R
64 0 R
65 0 R
]
endobj
56 0 obj
<<
  /Resources 3 0 R
  /Type /Page
  /MediaBox [0 0 612 792]
  /BleedBox [0 0 612 792]
  /TrimBox [0 0 612 792]
  /Parent 1 0 R
  /Annots 58 0 R
  /Contents 66 0 R
>>

endobj
67 0 obj
2356
endobj
69 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 102.0 544.2 513.995 555.0 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A 68 0 R
/H /I

>>
endobj
72 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 102.0 524.8 513.995 535.6 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A 71 0 R
/H /I

>>
endobj
74 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 102.0 505.4 513.995 516.2 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A 73 0 R
/H /I

>>
endobj
76 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 102.0 486.0 539.999 496.8 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A 75 0 R
/H /I

>>
endobj
77 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 96.0 471.59998 513.995 482.4 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A 75 0 R
/H /I

>>
endobj
79 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 102.0 452.2 513.994 463.0 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A 78 0 R
/H /I

>>
endobj
81 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 102.0 432.8 513.994 443.6 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A 80 0 R
/H /I

>>
endobj
83 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 102.0 413.40002 513.994 424.2 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A 82 0 R
/H /I

>>
endobj
85 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 102.0 394.0 513.994 404.8 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A 84 0 R
/H /I

>>
endobj
87 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 102.0 374.6 513.995 385.4 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A 86 0 R
/H /I

>>
endobj
89 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 102.0 355.2 513.994 366.0 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A 88 0 R
/H /I

>>
endobj
90 0 obj
<< /Length 91 0 R /Filter /FlateDecode >>
stream
xœ•ÝMoGà»~÷f4éîªþ¨½,¼Ù$°±kÀ‰²90
%¯$ۛŸî¡(öÌPÔû&HL–ßùâÈ5ř‰_¹ú÷©¯ÿÊVçŸNþwâǚ_™[¥¢ÛZ«|Zil¿^m
B¬/_\®ÞŸ\×ÜO'¿þV«Ûú·¶äà뫇¥Ç×W«_NÞu[ªÚnæŸg'ßýVeuöáÄ
%d~õÇC®î¥å!çàœ¬ÒPTWgŸV¿¾øþæóŸ·ÿ¸¼¹z±ªÿü7Dÿð28ï
^ž]n
^½ú¼>|óË͇ûoëÛÝÛo¾\_¬ï?Þ\»ôÕÕëqw»7›»Íí×ÍEý¶:{sòÃY=¢w“£ªŸŸw¥
ØxX²
ڎËï?rÕ!J=
¿=÷›«ó›O»]¹¿9´¿ÿþr¾¹Þüía«m­>ÌÖê}
\JÎ
íjÏÖ¿_í¿ùððâüæú~sÝçaE±.7YQ]¯—<x‹f¶]“ïÓÓÍÖmÆE¾n贄!ÇՋ÷—ëŸ]åõÝô}˜»Úöhÿñ°ÙýÆ4r;Âù&‡e¶àÙ艬ٌg“#²Bd‘5<›‘%Ü2áV·B¸ÂÍ7#܌p3Ü-8Ü-8Ü-8Ü-xÜ-xÜ-xÜ-Ü-Ü-Ü-ÂM7!܄pSÂM 7%Ü"á ·H¸EÂ-n‰pK„[&Ü2ᖠ·B¸­n
p3ÂÍ7ÃÝÄánâp7q¸›xÜM<î&
w»IÀÝ$àn7!܄pÂM 7%ܔpSÂ-n‘p‹„["Üá–·L¸eÂ-n™p+„[!Ü
áf„›n†»©ÃÝÔánêp7u¸›zÜM=î¦
wӀ»iÀÝjÏ
á&„›nB¸ÕŸÕfÙJZdÃñ¡NmpcKˁô¡¡Î,ßÆ3µtEDR7W닓YNWŸNÛúßÙޖ'ái>Ôc]ìʁvóµ±Ã³‘È8jc‡g•Èf<[;<+Dw

w
w
w
pÂM7!ܔpSÂM 7%Ü"á ·ØÜê)’Ù䉬ٌg³#²Bd‘5<[‘D–p3ÂÍ7ÃÝÄánâp7q¸›8ÜM<î&
w»IÀÝ$àn7!܄pÂM7%ܔpSÂ-n‘p‹„["Üá–·D¸eÂ-n™p+„[!Ü
áf„›nF¸î¦wS‡»©ÃÝÔãnêq7õ¸›ÜMî¦wÓ@¸ á&„›nÝIø±ÓêåIxý`¶¿FCž; ŸåÛÙ³¯'n©ý¥«o7ßî;gƒËM-¢öåX.‚¹‚åj/ŽåÌe,Wûo,'`.9У€
ô( ‡
zèá



hâ=ˆâ=¨â=Èâèâã*#MÆ·Ÿi@Vˆl"²†g5ÙHd
žžÈ*‘Íx6n‰pK„["Ü2ᖠ·L¸­n
p3ÂÍ7#Ü
wkאáYÜ­]Cg=îÖ®!ó¸[»†
Ïâní2<K¸ á&„›nJ¸)ᦄ[$Ü"áÇþù‚d
Ϧ@d#‘-x6{"«D6ãÙ∬Y­nF¸áf¸[»†
Ïâní28ëq·v
žÅÝÚ5dp6àní2<K¸ á&„›nJ¸)ᦄ›n‘p‹„[$Üá–·D¸eÂ-n™p˄[!Ü
áV7#܌p3ÜM
î¦wS‡»©ÃÝÔãnêq7õ¸›ÜMpÂM7!܄pێ¯³E6̳mh][i#î´ÍŒ7ê•!®ö¯ÆeŒ¼ÃöÆÏùêGð²[&L–©PÉËeö[
åe·éo¾\ý9)çý¤p:y÷þÕÏo_¿ýéï“âëë‹Íÿ'•ó›ÛÛ/Ÿ·W¦uåõõÅ4v»¾»ÜÜMj§‹Lïp
KÛ
'¥ïon§
ïƒîúqڐ›VÜ~&ó5ﯷ»º]V¿}¼¿\V߬¿®—Õ|hxë(ç{qp~ÅÚ9"›ˆ¬áY
D6قg£'²Jd3žM„["Üá–·L¸eÂ-n
p+„[!܌p3ÂÍ7ÃÝÚüÏânm~g=îÖæ‡xwkóC<‹»µù!ž%܄pÂM7%ܔpSÂ-n‘pk×´?c
ÉžMÈF"[ðlöDV‰lƳÅY!²„[!܌p3ÂÍp·6?ij¸[›ÂY»µù!žÅÝÚüÎÜ­Íñ,á&„›nB¸)ᦄ›nJ¸EÂ-n‘pK„["Üᖠ·L¸eÂ-n
p+„[!܌p3ÂÍp·6?ij¸[›âYÜ­Íñ,îÖæ‡p6ànm~ˆg 7!܄pÂM·ýå¯óì¡ùáx‰BwŸj5Վ¿Mš$¬foŸš$VRÇO³ÕÉpäVÖzƒJhÙgöb71ìJÝ`±«vÓÅ®zº,Mf|]½ôuUdYÜ»b7Ü{nùW_ׯ¶›w€yÐ(í‰zóÏå@§æˆ¬ÙDd
϶;Ûál$²϶;Ûá¬YÂM7!܄pÂM 7%ܔp‹„[$Ü"á–·D¸%Â-n™p˄[&Ü
áV·B¸áf„›n†»µ ð,îÖn€‚³
wk7@áYÜ­Ý
gq·vž%܄pÂM·±
¿6^´c‡:ÀöEXw“ÔC›"ÓPžï—«ûžcÝ_ª{VžÛ}9ߋÚýõ͛
ìþvÕÓeiÞýíêÓîO
»·°,Nº¿]qÚý
]þH÷gƒD{ýÙçr ó
D6قgëO <«D6ãÙúSÏ
‘MD–pÂM7!ܔpSÂM ·H¸EÂ-n‘pK„["Üᖠ·L¸e­n
p+„[!܌p3ÂÍp7u¸›:ÜM
î¦
wS»©ÇÝÔãnp7
¸›ÂM7!܄pS­ëþfY=Ôý¥<¹ÆplSt{©Ù®û{|{¤û+¾Œó¿ÙêjG~´Œéàb³½Ç¶n_ûÏúöürYî{À}õtYšö€ûzßv{0
Xk×î‹}øÌòOö€­OrÁµË+çŸÌÁ> ÎÖ> Ï
‘MDÖðlý/ÏF"[ðlí“ð,ᦄ[$Ü"á ·H¸%Â-n‰p˄[&Ü2áV·B¸­nF¸áf¸[ë“ð,îÖú$8ëq·Ö'áYÜ­õIp6àn­O³„›nB¸ ᦄ[×'ͲñPŸTò⎑í³~ÊjööXŸT÷®}á9[
»>Õ'm¯î?¾ß2îKÿڜo>ý¾¹]þÎþÿÃÕWO—¥i§´¯w7'ôû0¸áÀ~t½R·
ƒ
z ût_‡àêáëâ“8Ð<Û
‰g•Èf<Û
‰g
È&"kx¶=ÎnJ¸EÂ-n‘pK„["Üá–·L¸eÂ-n
p+„[!܌p3ÂÍ7ÃÝÆG"ÂYÜm|$"šõ¸ÛøHD8‹»D„³¸ÛøHD8K¸ á&„›n]¯3˦½N»ø'·Ì¾ÉhÿC¿}¬áô퓭N»b­ÌWUÿŒ?ÒæT,[,2Ûzˆ/ç»ÐØ'÷ýMW=]–º‰MWõƒ>Îlºòϛ«Íúns1ÿØÚµvN¼-`¡|À£8ZÛ
8ªx4ÃÑÚëÀQÁ£ âZŠk)®¥¸Vĵ"®›VhOT}6š

<šð¨ÁÑ
ðhÄ£ŽGâZ†k®e¸–ÁZíú8
kµ«Ш‡µÆ™<
µÆ‰<
µÆy<ŵ×\Kp-ŵ×R\+âZ׊¸Vĵ®•p­„ke\+ãZ×*¸VÁµ
®Up-õ
×2Xk
ȣQXk
ºƒQk#w4
kw0`­q܎Fq-Áµ×\Kq­ýfÑϱÿèòõTÕk7á®ç’ýõoÌÙ-.×%Ãn‹‡‡ìÙ=»}¿{¼QWë/FÝWûñú¾zº,MÇëÝj»ñú¾ÚÆëaYîÆëÝ.
¶ÅwÙ§/=Õ!ë8&˜
º¼
gÛMJxVˆl"²†gë :žD¶àÙzŽŽgq·ö•œÂM7!܄pSÂM 7%Ü"á ·H¸%Â-n‰pK„[&Ü2ᖠ·B¸­nF¸áf„›ání+ <‹»µ¯$à¬ÇÝÚWxwk_IàYÜ­}%g 7!܄pÂmÿ•Ä<»kÒ~8;ywòá£U
endstream
endobj
70 0 obj
[
69 0 R
72 0 R
74 0 R
76 0 R
77 0 R
79 0 R
81 0 R
83 0 R
85 0 R
87 0 R
89 0 R
]
endobj
8 0 obj
<<
  /Resources 3 0 R
  /Type /Page
  /MediaBox [0 0 612 792]
  /BleedBox [0 0 612 792]
  /TrimBox [0 0 612 792]
  /Parent 1 0 R
  /Annots 70 0 R
  /Contents 90 0 R
>>

endobj
91 0 obj
3193
endobj
93 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 110.328 671.4 193.992 682.2 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/java/3_0_2/changes/Changes.html)
/S /URI >>
/H /I

>>
endobj
95 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 217.32 671.4 300.984 682.2 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://lucene.apache.org/java/2_9_3/changes/Changes.html)
/S /URI >>
/H /I

>>
endobj
96 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 158.664 657.144 181.32 667.716 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://www.apache.org/dyn/closer.cgi/lucene/java/)
/S /URI >>
/H /I

>>
endobj
97 0 obj
<< /Type /Annot
/Subtype /Link
/Rect [ 329.268 657.0 349.92 667.8 ]
/C [ 0 0 0 ]
/Border [ 0 0 0 ]
/A << /URI (http://repo1.maven.org/maven2/org/apache/lucene/)
/S /URI >>
/H /I

>>
endobj
98 0 obj
<< /Length 99 0 R /Filter /FlateDecode >>
stream
xœ•TMo›@½ó+¶7çÐÉ~²ì1‰âTU[5±¥
Ò
ˆÁ6†°­üûÎÂk7qk[†a<ófޛa¡øýÌð¢
'‹Mð;`­ƒ¾Öu=.§œD É|éþÆ!9„œ›($^çò4yLóE¹I/Ȅà¯)qõ/Ö½÷Ûv‘é§
òLæ_ƒÛypX6Œd׊õlˆTöžwwà
ÍÁX“Ç À¸»àé½IçßÛL`h¹ìÖÎÉ
+µlØ_l$ "nLH˜)
ŸñÊuÝö:†K£#}
œFFH¨£Ó
i
Sˆ¸–Š‘Õj4hÍ)$„HÊò¦|}«²ÕºqâýâŠ9“SF9Ä=PzV.›}\õÓr[$q“•ôÑyFÝ?¤uZíÒüÝωÑȳ
¬Ï*-8hc?¤JÉò#w+„"Œ·JøPbÀΠ¥>K}í»²•Ì)ÎÀâúIp
›/W?îng#‰ãÁÛÁ•Ý—Š1ÀÆÅaT *3F÷>»@·îÅ{íØ6â"9ɃqÕý,ÄÙ$
ÎÀ€3
&ÆÈÿcàÅ1X–•ë&I›8Ëkð]NµC‘(;@ºÎŠ¸zs@ƒ(“ºÜV‹~E“¬nªìek—´>~ë(áD7îu¼Ãžâ—üôº`Oa()e(ëÔœЖj
)ûÀKWxð)»,b˜•|ô

ë÷vÑ^yDTÇ"y
l¹~wiÑó®šl/†×ö\E¸0€£¢T'‰{g¼läß­œÂyãÆDïûÇÊyñï¨Òž;ªm
endstream
endobj
94 0 obj
[
93 0 R
95 0 R
96 0 R
97 0 R
]
endobj
92 0 obj
<<
  /Resources 3 0 R
  /Type /Page
  /MediaBox [0 0 612 792]
  /BleedBox [0 0 612 792]
  /TrimBox [0 0 612 792]
  /Parent 1 0 R
  /Annots 94 0 R
  /Contents 98 0 R
>>

endobj
99 0 obj
611
endobj
102 0 obj
<< /Title (Table of contents)
 /Parent 101 0 R
 /Next 103 0 R
 /A 100 0 R
>> endobj
103 0 obj
<< /Title (1 What Is Apache Lucene?)
 /Parent 101 0 R
 /Prev 102 0 R
 /Next 104 0 R
 /A 68 0 R
>> endobj
104 0 obj
<< /Title (2 The Apache Software Foundation)
 /Parent 101 0 R
 /Prev 103 0 R
 /Next 105 0 R
 /A 71 0 R
>> endobj
105 0 obj
<< /Title (3 News)
 /Parent 101 0 R
 /Prev 104 0 R
 /First 106 0 R
 /Last 112 0 R
 /Count 7
 /A 73 0 R
>> endobj
106 0 obj
<< /Title (3.1 28 July 2011 - WARNING: Index corruption and crashes in Apache Lucene Core / Apache Solr with Java 7)
 /Parent 105 0 R
 /Next 107 0 R
 /A 75 0 R
>> endobj
107 0 obj
<< /Title (3.2 1 July 2011 - Lucene Core 3.3 and Solr 3.3 Available)
 /Parent 105 0 R
 /Prev 106 0 R
 /Next 108 0 R
 /A 78 0 R
>> endobj
108 0 obj
<< /Title (3.3 4 June 2011 - Lucene Core 3.2 and Solr 3.2 Available)
 /Parent 105 0 R
 /Prev 107 0 R
 /Next 109 0 R
 /A 80 0 R
>> endobj
109 0 obj
<< /Title (3.4 31 March 2011 - Lucene Core 3.1 and Solr 3.1 Available)
 /Parent 105 0 R
 /Prev 108 0 R
 /Next 110 0 R
 /A 82 0 R
>> endobj
110 0 obj
<< /Title (3.5 3 December 2010 - Lucene Java 3.0.3 and 2.9.4 available)
 /Parent 105 0 R
 /Prev 109 0 R
 /Next 111 0 R
 /A 84 0 R
>> endobj
111 0 obj
<< /Title (3.6 25 June 2010 - Solr 1.4.1 Released)
 /Parent 105 0 R
 /Prev 110 0 R
 /Next 112 0 R
 /A 86 0 R
>> endobj
112 0 obj
<< /Title (3.7 18 June 2010 - Lucene Java 3.0.2 and 2.9.3 available)
 /Parent 105 0 R
 /Prev 111 0 R
 /A 88 0 R
>> endobj
113 0 obj
<<
  /Type /Font
  /Subtype /Type1
  /BaseFont /Helvetica-Bold
  /Encoding /WinAnsiEncoding
>>

endobj
114 0 obj
<<
  /Type /Font
  /Subtype /Type1
  /BaseFont /Times-Roman
  /Encoding /WinAnsiEncoding
>>

endobj
115 0 obj
<<
  /Type /Font
  /Subtype /Type1
  /BaseFont /Times-Italic
  /Encoding /WinAnsiEncoding
>>

endobj
116 0 obj
<<
  /Type /Font
  /Subtype /Type1
  /BaseFont /Helvetica
  /Encoding /WinAnsiEncoding
>>

endobj
117 0 obj
<<
  /Type /Font
  /Subtype /Type1
  /BaseFont /Courier
  /Encoding /WinAnsiEncoding
>>

endobj
118 0 obj
<<
  /Type /Font
  /Subtype /Type1
  /BaseFont /Helvetica-Oblique
  /Encoding /WinAnsiEncoding
>>

endobj
119 0 obj
<<
  /Type /Font
  /Subtype /Type1
  /BaseFont /Times-Bold
  /Encoding /WinAnsiEncoding
>>

endobj
1 0 obj
<< /Type /Pages
/Count 8
/Kids [8 0 R 10 0 R 28 0 R 35 0 R 44 0 R 50 0 R 56 0 R 92 0 R ] >>
endobj
2 0 obj
<<
  /Type /Catalog
  /Pages 1 0 R
  /Metadata 7 0 R
  /PageLabels 9 0 R
  /Outlines 101 0 R
  /PageMode /UseOutlines
>>

endobj
3 0 obj
<<
/Font <<
  /F3 113 0 R
  /F5 114 0 R
  /F1 116 0 R
  /F6 115 0 R
  /F9 117 0 R
  /F2 118 0 R
  /F7 119 0 R
>>
/ProcSet [ /PDF /ImageB /ImageC /Text ]
/ColorSpace <<
  /DefaultRGB 6 0 R
>>
>>
endobj
9 0 obj
<< /Nums [0 << /P (1) >>
 1 << /P (2) >>
 2 << /P (3) >>
 3 << /P (4) >>
 4 << /P (5) >>
 5 << /P (6) >>
 6 << /P (7) >>
 7 << /P (8) >>
] >>

endobj
68 0 obj
<< /Type /Action
/S /GoTo
/D [10 0 R /XYZ 90.0 684.0 null]
>>
endobj
71 0 obj
<< /Type /Action
/S /GoTo
/D [10 0 R /XYZ 90.0 501.6 null]
>>
endobj
73 0 obj
<< /Type /Action
/S /GoTo
/D [10 0 R /XYZ 90.0 366.4 null]
>>
endobj
75 0 obj
<< /Type /Action
/S /GoTo
/D [10 0 R /XYZ 90.0 340.0 null]
>>
endobj
78 0 obj
<< /Type /Action
/S /GoTo
/D [28 0 R /XYZ 90.0 472.8 null]
>>
endobj
80 0 obj
<< /Type /Action
/S /GoTo
/D [35 0 R /XYZ 90.0 524.0 null]
>>
endobj
82 0 obj
<< /Type /Action
/S /GoTo
/D [44 0 R /XYZ 90.0 528.0 null]
>>
endobj
84 0 obj
<< /Type /Action
/S /GoTo
/D [50 0 R /XYZ 90.0 330.8 null]
>>
endobj
86 0 obj
<< /Type /Action
/S /GoTo
/D [56 0 R /XYZ 90.0 546.8 null]
>>
endobj
88 0 obj
<< /Type /Action
/S /GoTo
/D [56 0 R /XYZ 90.0 452.0 null]
>>
endobj
100 0 obj
<< /Type /Action
/S /GoTo
/D [8 0 R /XYZ 90.0 577.2 null]
>>
endobj
101 0 obj
<< /First 102 0 R
 /Last 105 0 R
>> endobj
xref
0 120
0000000000 65535 f
0000034913 00000 n
0000035020 00000 n
0000035157 00000 n
0000000015 00000 n
0000000165 00000 n
0000002847 00000 n
0000002880 00000 n
0000030692 00000 n
0000035366 00000 n
0000009122 00000 n
0000004052 00000 n
0000009018 00000 n
0000004233 00000 n
0000004410 00000 n
0000004593 00000 n
0000004776 00000 n
0000004964 00000 n
0000005137 00000 n
0000005356 00000 n
0000005569 00000 n
0000005782 00000 n
0000005995 00000 n
0000006199 00000 n
0000006407 00000 n
0000009307 00000 n
0000009328 00000 n
0000009349 00000 n
0000012475 00000 n
0000009370 00000 n
0000012434 00000 n
0000009603 00000 n
0000009803 00000 n
0000010007 00000 n
0000012660 00000 n
0000015824 00000 n
0000012681 00000 n
0000015769 00000 n
0000012861 00000 n
0000013037 00000 n
0000013237 00000 n
0000013437 00000 n
0000013621 00000 n
0000016009 00000 n
0000018716 00000 n
0000016030 00000 n
0000018682 00000 n
0000016230 00000 n
0000016434 00000 n
0000018901 00000 n
0000021309 00000 n
0000018922 00000 n
0000021275 00000 n
0000019105 00000 n
0000019288 00000 n
0000021494 00000 n
0000025639 00000 n
0000021515 00000 n
0000025563 00000 n
0000021722 00000 n
0000021928 00000 n
0000022131 00000 n
0000022329 00000 n
0000022529 00000 n
0000022757 00000 n
0000022944 00000 n
0000023131 00000 n
0000025824 00000 n
0000035524 00000 n
0000025845 00000 n
0000030595 00000 n
0000035602 00000 n
0000025979 00000 n
0000035680 00000 n
0000026113 00000 n
0000035758 00000 n
0000026247 00000 n
0000026381 00000 n
0000035836 00000 n
0000026518 00000 n
0000035914 00000 n
0000026652 00000 n
0000035992 00000 n
0000026786 00000 n
0000036070 00000 n
0000026924 00000 n
0000036148 00000 n
0000027058 00000 n
0000036226 00000 n
0000027192 00000 n
0000027326 00000 n
0000030876 00000 n
0000032446 00000 n
0000030897 00000 n
0000032398 00000 n
0000031104 00000 n
0000031310 00000 n
0000031513 00000 n
0000031711 00000 n
0000032631 00000 n
0000036304 00000 n
0000036382 00000 n
0000032651 00000 n
0000032745 00000 n
0000032860 00000 n
0000032983 00000 n
0000033106 00000 n
0000033286 00000 n
0000033433 00000 n
0000033580 00000 n
0000033729 00000 n
0000033879 00000 n
0000034008 00000 n
0000034140 00000 n
0000034253 00000 n
0000034363 00000 n
0000034474 00000 n
0000034582 00000 n
0000034688 00000 n
0000034804 00000 n
trailer
<<
/Size 120
/Root 2 0 R
/Info 4 0 R
/ID [<E116B8EAE1ADE0F9D2F56E4E32E8780D> <E116B8EAE1ADE0F9D2F56E4E32E8780D>]
>>
startxref
36435
%%EOF
= Solr Plugins =
Solr allows you to load custom code to perform a variety of tasks within Solr -- from custom Request Handlers to process your searches, to custom Analyzers and Token Filters for your text field, even custom Field Types.

<<TableOfContents>>

= How to Load Plugins =
Plugin code can be loaded into Solr by putting your classes into a JAR file, and then configuring Solr to know how to find them.

If you want to use multiple !SolrCores, and have a plugin available to all of them, you can place your JAR files in a directory specified using the "sharedLib" attribute in your [[CoreAdmin#Configuration|solr.xml]] file prior to starting your servlet container.

For loading plugins in individual !SolrCores, you have two options:

 1. Place your JARs in a `lib` directory in the instanceDir of your !SolrCore. In the example program, the location is example/solr/lib. ''This directory does not exist in the distribution'', so you would need to do `mkdir` for the first time.
 1. use the [[SolrConfigXml#lib|lib]] directive in your solrconfig.xml file to specify an arbitrary JAR path, directory of JAR files, or a directory plus regex that JAR file names must match.

Loading plugins uses a custom Class Loader. It has been tested with a variety of Servlet Containers, but given the multitudes of servlet containers available in the wild it may not always work with ''every'' servlet container.

== The Old Way ==
Another method that works consistently on any servlet container is to:

 1. unpack the solr.war
 1. add a jar containing your custom classes to the `WEB-INF/lib` directory
 1. repack your new, customized, solr.war and use it.

= Classes that are 'Pluggable' =
The following is a complete list of every API that can be treated as a plugin in Solr, with information on how to use that configure your Solr instance to use an instance of that class.

== Request Processing ==
=== SolrRequestHandler ===
Instances of [[http://lucene.apache.org/solr/docs/api/org/apache/solr/request/SolrRequestHandler.html|SolrRequestHandler]] define the logic that is executed for any request. Multiple handlers (including multiple instances of the same !SolrRequestHandler class with different configurations) can be specified in your [[SolrConfigXml|solrconfig.xml]]...

{{{
  <requestHandler name="foo" class="my.package.CustomRequestHandler" />
  <requestHandler name="bar" class="my.package.AnotherCustomRequestHandler" />
  <requestHandler name="baz" class="my.package.AnotherCustomRequestHandler">
    <!-- initialization args may optionally be defined here -->
     <lst name="defaults">
       <int name="rows">10</int>
       <str name="fl">*</str>
       <str name="version">2.1</str>
     <lst>
     <int name="someConfigValue">42</int>
  </requestHandler>
}}}
for more info, see: SolrRequestHandler

==== SearchComponent ====
<!> [[Solr1.3]]

Instances of [[http://lucene.apache.org/solr/api/org/apache/solr/handler/component/SearchComponent.html|SearchComponent]] define discrete units of logic that can be combined together and reused by Request Handlers that know about them. (in particular: [[http://lucene.apache.org/solr/api/org/apache/solr/handler/component/SearchHandler.html|SearchHandler]])

for more info, see: SearchComponent

==== QParserPlugin ====

[[http://lucene.apache.org/solr/api/org/apache/solr/search/QParserPlugin.html|QParserPlugin]] can be used to define customized user query processing instances of [[http://lucene.apache.org/solr/api/org/apache/solr/search/QParser.html|QParser]] .

First, implement a subclass of [[http://lucene.apache.org/solr/api/org/apache/solr/search/QParserPlugin.html|QParserPlugin]]. This consists primarily of implementing the parse() method
to construct the appropriate Query objects.

Next register it in [[SolrConfigXml|solrconfig.xml]] like this:

{{{
  <queryParser name="myqueryparser" class="my.package.MyQueryParserPlugin" />
}}}

See SolrQuerySyntax and it's list of useful parser implementations for examples of writing a !QParserPlugin.

Having done this, you can choose to use your query parser on a one-time basis using the defType query parameter, like this:

{{{
http://mysolrmachine:8983/solr/select/?defType=myqueryparser&q=hi
}}}
You can also specify your query parser as part of the q parameter, like this:

{{{
http://mysolrmachine:8983/solr/select/?&q={!myqueryparser}hi
}}}
For more permanent use, you will likely want to define a separate SolrRequestHandler for your parser, like this:

{{{
   <requestHandler name="dismax" class="solr.SearchHandler" >
    <lst name="defaults">
     <str name="defType">myqueryparser</str>
     ...
}}}
==== ValueSourceParser ====
Use this to plugin your own custom functions see FunctionQuery.

register in solrconfig.xml directly under the <config> tag

{{{
<valueSourceParser name="myfunc" class="com.mycompany.MyValueSourceParser" />
}}}
The class must implement [[http://lucene.apache.org/solr/api/org/apache/solr/search/ValueSourceParser.html|org.apache.solr.search.ValueSourceParser]]

=== Highlighting ===
/!\ :TODO: /!\ NEED DOCS

==== SolrFragmenter ====
/!\ :TODO: /!\ NEED DOCS

==== SolrFormatter ====
/!\ :TODO: /!\ NEED DOCS

=== UpdateRequestProcessorFactory ===
/!\ :TODO: /!\ NEED DOCS

See UpdateRequestProcessor

=== QueryResponseWriter ===
Instances of [[http://lucene.apache.org/solr/docs/api/org/apache/solr/request/QueryResponseWriter.html|QueryResponseWriter]] define the formatting used to output the results of a request. Multiple writers (including multiple instances of the same !QueryResponseWriter class with different configurations) can be specified in your [[SolrConfigXml|solrconfig.xml]]...

{{{
  <queryResponseWriter name="wow" class="my.package.CustomResponseWriter" />
  <queryResponseWriter name="woz" class="my.package.AnotherCustomResponseWriter" />
  <queryResponseWriter name="woz" class="my.package.AnotherCustomResponseWriter" >
    <!-- initialization args may optionally be defined here -->
    <int name="someConfigValue">42</int>
  </queryResponseWriter>
}}}
=== Similarity ===
The [[http://lucene.apache.org/java/docs/api/org/apache/lucene/search/Similarity.html|Similarity]] class is a native Lucene concept that determines how much of the score calculations for the various types of queries are executed. For more information on how the methods in the Similarity class are used, consult the [[http://lucene.apache.org/java/2_9_0/scoring.html|Lucene scoring documentation]]. If you wish to override the !DefaultSimilarity provided by Lucene, you can specify your own subclass in your [[SchemaXml|schema.xml]]...

{{{
  <similarity class="my.package.CustomSimilarity"/>
}}}
=== CacheRegenerator ===
The [[http://lucene.apache.org/solr/docs/api/org/apache/solr/search/CacheRegenerator.html|CacheRegenerator]] API allows people who are writing custom !SolrRequestHandlers which utilize custom [[SolrCaching|User Caches]] to specify how those caches should be populated during autowarming. A regenerator class can be specified when the cache is declared in your [[SolrConfigXml|solrconfig.xml]]...

{{{
    <cache name="myCustomCacheInstance"
      class="solr.LRUCache"
      size="4096"
      initialSize="1024"
      autowarmCount="1024"
      regenerator="my.package.CustomCacheRegenerator"
      />
}}}
== Fields ==
=== Analyzer ===
The [[http://lucene.apache.org/java/docs/api/org/apache/lucene/analysis/Analyzer.html|Analyzer]] class is a native Lucene concept that determines how tokens are produced from a piece of text. Solr allows Analyzers to be specified for each fieldtype in your [[SchemaXml|schema.xml]] that uses the !TextField class -- and even allows for different Analyzers to be specified for indexing text as documents are added, and parsing text specified in a query...

{{{
    <fieldtype name="text_foo" class="solr.TextField">
      <analyzer class="my.package.CustomAnalyzer"/>
    </fieldType>
    <fieldtype name="text_bar" class="solr.TextField">
      <analyzer type="index" class="my.package.CustomAnalyzerForIndexing"/>
      <analyzer type="query" class="my.package.CustomAnalyzerForQuering"/>
    </fieldType>
}}}
Solr also provides a [[http://lucene.apache.org/solr/docs/api/org/apache/solr/analysis/SolrAnalyzer.html|SolrAnalyzer]] base class which can be used if you want to write your own Analyzer and configure the "positionIncrementGap" in your schema.xml...

{{{
    <fieldtype name="text_baz" class="solr.TextField" positionIncrementGap="100">
      <analyzer class="my.package.CustomSolrAnalyzer" />
    </fieldType>
}}}
Specifying an Analyzer class in your schema.xml makes a lot of sense if you already have an existing Analyzer you wish to use as is, but if you are planning to write Analysis code from scratch that you would like to use in Solr, you should keep reading the following sections...

=== Tokenizer and TokenFilter ===
In addition to specifing specific Analyzer classes, Solr can construct Analyzers on the fly for each field type using a [[http://lucene.apache.org/java/docs/api/org/apache/lucene/analysis/Tokenizer.html|Tokenizer]] and any number of [[http://lucene.apache.org/java/docs/api/org/apache/lucene/analysis/TokenFilter.html|TokenFilters]]. To take advantage of this functionality with any Tokenizers or !TokenFilters you may have (or may want to implement) you'll need to provide a [[http://lucene.apache.org/solr/docs/api/org/apache/solr/analysis/TokenizerFactory.html|TokenizerFactory]] and [[http://lucene.apache.org/solr/docs/api/org/apache/solr/analysis/TokenFilterFactory.html|TokenFilterFactory]] which takes care of any initialization and configuration, and specify these Factories in your [[SchemaXml|schema.xml]]...

{{{
    <fieldtype name="text_zop" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
          <tokenizer class="my.package.CustomTokenizerFactory"/>
          <!-- this TokenFilterFactory has custom options -->
          <filter class="my.package.CustomTokenFilter" optA="yes" optB="maybe" optC="42.5"/>
          <!-- Solr has many existing FilterFactories that you can reuse -->
          <filter class="solr.StopFilterFactory" ignoreCase="true"/>
      </analyzer>
    </fieldtype>
}}}
=== FieldType ===
If you have very specialized data type needs, you can specify your own [[http://lucene.apache.org/solr/docs/api/org/apache/solr/schema/FieldType.html|FieldType]] class for each <`fieldtype>` you declare in your [[SchemaXml|schema.xml]], to control how the values for those fields are encoded in your index...

{{{
    <fieldtype name="wacko" class="my.package.CustomFieldType" />
}}}
== Internals ==
=== SolrCache ===
The [[http://lucene.apache.org/solr/docs/api/org/apache/solr/search/SolrCache.html|SolrCache]] API allows you to specify custom Cache implementations for any of the [[SolrCaching|various caches]] you might declare in your [[SolrConfigXml|solrconfig.xml]]...

{{{
    <filterCache class="my.package.CustomCache" size="512" />
    <queryResultsCache class="my.package.CustomCache" size="512" />
    <documentCache class="my.package.AlternateCustomCache" size="512" />
}}}
=== SolrEventListener ===
Instances of the [[http://lucene.apache.org/solr/docs/api/org/apache/solr/core/SolrEventListener.html|SolrEventListener]] Interface can be configured in your [[SolrConfigXml|solrconfig.xml]] to be be executed any time specific events occur within Solr.

`firstSearcher` and `newSearcher` events trigger the `newSearcher()` method with the appropriate args, `postCommit` and `postOptimize` events will trigger the `postCommit()` method...

{{{
    <listener event="newSearcher" class="my.package.CustomEventListener">
      <-- init args for the EventListener instance can be specified here -->
      <lst name="arg1">
        <str name="q">solr</str> <str name="start">0</str> <str name="rows">10</str>
      </lst>
      <int name="otherArg">42</int>
    </listener>
}}}
=== UpdateHandler ===
The [[http://lucene.apache.org/solr/docs/api/org/apache/solr/update/UpdateHandler.html|UpdateHandler]] API allows you to specify a custom algorithm for determining how sequences of adds and deletes are processed by Solr. The !UpdateHandler you wish to use can be configured in your [[SolrConfigXml|solrconfig.xml]], but implementing a new !UpdateHandler is considered '''extremely''' advanced and is not recommended....

{{{
  <updateHandler class="my.package.CustomUpdateHandler">
}}}
= Building Plugins =
To develop your own plugins, add the `apache-solr-*.jar` jar files to the classpath you use to compile your code. They contains all of the Solr Interfaces and Class files you may need. If you are developing plugins that know about lower level Lucene interfaces, you may need to also include the `lucene-*.jar` jar files from the `lib/` directory of your Solr distribution.

= Plugin Initialization =
<!> [[Solr1.3]]

Plugins are initialized either with [[http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/src/java/org/apache/solr/util/plugin/MapInitializedPlugin.java|init( Map<String,String> args )]] or [[http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/src/java/org/apache/solr/util/plugin/NamedListInitializedPlugin.java|init( NamedList args )]].

<!> [[Solr1.4]]

Plugins can also be initialized with [[http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/src/java/org/apache/solr/util/plugin/PluginInfoInitialized.java|init( PluginInfo info )]]. These Plugins can have children ( any Subnode with a "class" attribute is considered a child ).
If a pluginInfoInitialized Plugin wants to initialise these children in its {{{inform( core )}}} method via {{{ core.create.createInitInstance() }}}, the children must not be !SolrCoreAware.
see [[http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/src/java/org/apache/solr/core/PluginInfo.java|PluginInfo]].
<!> [[Solr3.1]]
As of Solr3.1 any subnode which is not a "lst","str","int","bool","arr","float" or "double" is considered a child. (Yes "long" is missing - see SOLR-2541)

== ResourceLoaderAware ==
Classes that need to know about the [[http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/src/common/org/apache/solr/common/ResourceLoader.java|ResourceLoader]] can implement [[http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/src/java/org/apache/solr/util/plugin/ResourceLoaderAware.java|ResourceLoaderAware]]. Valid !ResourceLoaderAware include:

 * !TokenFilterFactory
 * !TokenizerFactory
 * !FieldType

== SolrCoreAware ==
Classes that need to know about the [SolrCore] can implement [[http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/src/java/org/apache/solr/util/plugin/SolrCoreAware.java|SolrCoreAware]]. Classes implementing !SolrCoreAware must not have a dedicated Constructor. Valid !SolrCoreAware classes include:

 * SolrRequestHandler
 * QueryResponseWriter
 * SearchComponent

== Lifecycle ==
The initialization lifecycle is:

 1. Constructor
 1. {{{init( Map / NamedList / PluginInfo )}}}
 1. !ResourceLoaderAware classes call: {{{inform( ResourceLoader );}}}
 1. Before the first request is made and after all plugins have been created and registered, !SolrCoreAware plugins call: {{{inform( SolrCore );}}}

Solr Plugins

Solr allows you to load custom code to perform a variety of tasks within Solr -- from custom Request Handlers to process your searches, to custom Analyzers and Token Filters for your text field, even custom Field Types.

How to Load Plugins

Plugin code can be loaded into Solr by putting your classes into a JAR file, and then configuring Solr to know how to find them.

If you want to use multiple SolrCores, and have a plugin available to all of them, you can place your JAR files in a directory specified using the "sharedLib" attribute in your solr.xml file prior to starting your servlet container.

For loading plugins in individual SolrCores, you have two options:

  1. Place your JARs in a lib directory in the instanceDir of your SolrCore. In the example program, the location is example/solr/lib. This directory does not exist in the distribution, so you would need to do mkdir for the first time.

  2. use the lib directive in your solrconfig.xml file to specify an arbitrary JAR path, directory of JAR files, or a directory plus regex that JAR file names must match.

Loading plugins uses a custom Class Loader. It has been tested with a variety of Servlet Containers, but given the multitudes of servlet containers available in the wild it may not always work with every servlet container.

The Old Way

Another method that works consistently on any servlet container is to:

  1. unpack the solr.war
  2. add a jar containing your custom classes to the WEB-INF/lib directory

  3. repack your new, customized, solr.war and use it.

Classes that are 'Pluggable'

The following is a complete list of every API that can be treated as a plugin in Solr, with information on how to use that configure your Solr instance to use an instance of that class.

Request Processing

SolrRequestHandler

Instances of SolrRequestHandler define the logic that is executed for any request. Multiple handlers (including multiple instances of the same SolrRequestHandler class with different configurations) can be specified in your solrconfig.xml...

  <requestHandler name="foo" class="my.package.CustomRequestHandler" />
  <requestHandler name="bar" class="my.package.AnotherCustomRequestHandler" />
  <requestHandler name="baz" class="my.package.AnotherCustomRequestHandler">
    <!-- initialization args may optionally be defined here -->
     <lst name="defaults">
       <int name="rows">10</int>
       <str name="fl">*</str>
       <str name="version">2.1</str>
     <lst>
     <int name="someConfigValue">42</int>
  </requestHandler>

for more info, see: SolrRequestHandler

SearchComponent

<!> Solr1.3

Instances of SearchComponent define discrete units of logic that can be combined together and reused by Request Handlers that know about them. (in particular: SearchHandler)

for more info, see: SearchComponent

QParserPlugin

QParserPlugin can be used to define customized user query processing instances of QParser .

First, implement a subclass of QParserPlugin. This consists primarily of implementing the parse() method to construct the appropriate Query objects.

Next register it in solrconfig.xml like this:

  <queryParser name="myqueryparser" class="my.package.MyQueryParserPlugin" />

See SolrQuerySyntax and it's list of useful parser implementations for examples of writing a !QParserPlugin.

Having done this, you can choose to use your query parser on a one-time basis using the defType query parameter, like this:

http://mysolrmachine:8983/solr/select/?defType=myqueryparser&q=hi

You can also specify your query parser as part of the q parameter, like this:

http://mysolrmachine:8983/solr/select/?&q={!myqueryparser}hi

For more permanent use, you will likely want to define a separate SolrRequestHandler for your parser, like this:

   <requestHandler name="dismax" class="solr.SearchHandler" >
    <lst name="defaults">
     <str name="defType">myqueryparser</str>
     ...

ValueSourceParser

Use this to plugin your own custom functions see FunctionQuery.

register in solrconfig.xml directly under the <config> tag

<valueSourceParser name="myfunc" class="com.mycompany.MyValueSourceParser" />

The class must implement org.apache.solr.search.ValueSourceParser

Highlighting

/!\ :TODO: /!\ NEED DOCS

SolrFragmenter

/!\ :TODO: /!\ NEED DOCS

SolrFormatter

/!\ :TODO: /!\ NEED DOCS

UpdateRequestProcessorFactory

/!\ :TODO: /!\ NEED DOCS

See UpdateRequestProcessor

QueryResponseWriter

Instances of QueryResponseWriter define the formatting used to output the results of a request. Multiple writers (including multiple instances of the same QueryResponseWriter class with different configurations) can be specified in your solrconfig.xml...

  <queryResponseWriter name="wow" class="my.package.CustomResponseWriter" />
  <queryResponseWriter name="woz" class="my.package.AnotherCustomResponseWriter" />
  <queryResponseWriter name="woz" class="my.package.AnotherCustomResponseWriter" >
    <!-- initialization args may optionally be defined here -->
    <int name="someConfigValue">42</int>
  </queryResponseWriter>

Similarity

The Similarity class is a native Lucene concept that determines how much of the score calculations for the various types of queries are executed. For more information on how the methods in the Similarity class are used, consult the Lucene scoring documentation. If you wish to override the DefaultSimilarity provided by Lucene, you can specify your own subclass in your schema.xml...

  <similarity class="my.package.CustomSimilarity"/>

CacheRegenerator

The CacheRegenerator API allows people who are writing custom SolrRequestHandlers which utilize custom User Caches to specify how those caches should be populated during autowarming. A regenerator class can be specified when the cache is declared in your solrconfig.xml...

    <cache name="myCustomCacheInstance"
      class="solr.LRUCache"
      size="4096"
      initialSize="1024"
      autowarmCount="1024"
      regenerator="my.package.CustomCacheRegenerator"
      />

Fields

Analyzer

The Analyzer class is a native Lucene concept that determines how tokens are produced from a piece of text. Solr allows Analyzers to be specified for each fieldtype in your schema.xml that uses the TextField class -- and even allows for different Analyzers to be specified for indexing text as documents are added, and parsing text specified in a query...

    <fieldtype name="text_foo" class="solr.TextField">
      <analyzer class="my.package.CustomAnalyzer"/>
    </fieldType>
    <fieldtype name="text_bar" class="solr.TextField">
      <analyzer type="index" class="my.package.CustomAnalyzerForIndexing"/>
      <analyzer type="query" class="my.package.CustomAnalyzerForQuering"/>
    </fieldType>

Solr also provides a SolrAnalyzer base class which can be used if you want to write your own Analyzer and configure the "positionIncrementGap" in your schema.xml...

    <fieldtype name="text_baz" class="solr.TextField" positionIncrementGap="100">
      <analyzer class="my.package.CustomSolrAnalyzer" />
    </fieldType>

Specifying an Analyzer class in your schema.xml makes a lot of sense if you already have an existing Analyzer you wish to use as is, but if you are planning to write Analysis code from scratch that you would like to use in Solr, you should keep reading the following sections...

Tokenizer and TokenFilter

In addition to specifing specific Analyzer classes, Solr can construct Analyzers on the fly for each field type using a Tokenizer and any number of TokenFilters. To take advantage of this functionality with any Tokenizers or TokenFilters you may have (or may want to implement) you'll need to provide a TokenizerFactory and TokenFilterFactory which takes care of any initialization and configuration, and specify these Factories in your schema.xml...

    <fieldtype name="text_zop" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
          <tokenizer class="my.package.CustomTokenizerFactory"/>
          <!-- this TokenFilterFactory has custom options -->
          <filter class="my.package.CustomTokenFilter" optA="yes" optB="maybe" optC="42.5"/>
          <!-- Solr has many existing FilterFactories that you can reuse -->
          <filter class="solr.StopFilterFactory" ignoreCase="true"/>
      </analyzer>
    </fieldtype>

FieldType

If you have very specialized data type needs, you can specify your own FieldType class for each <fieldtype> you declare in your schema.xml, to control how the values for those fields are encoded in your index...

    <fieldtype name="wacko" class="my.package.CustomFieldType" />

Internals

SolrCache

The SolrCache API allows you to specify custom Cache implementations for any of the various caches you might declare in your solrconfig.xml...

    <filterCache       class="my.package.CustomCache"          size="512" />
    <queryResultsCache class="my.package.CustomCache"          size="512"  />
    <documentCache     class="my.package.AlternateCustomCache" size="512"  />

SolrEventListener

Instances of the SolrEventListener Interface can be configured in your solrconfig.xml to be be executed any time specific events occur within Solr.

firstSearcher and newSearcher events trigger the newSearcher() method with the appropriate args, postCommit and postOptimize events will trigger the postCommit() method...

    <listener event="newSearcher" class="my.package.CustomEventListener">
      <-- init args for the EventListener instance can be specified here -->
      <lst name="arg1">
        <str name="q">solr</str> <str name="start">0</str> <str name="rows">10</str>
      </lst>
      <int name="otherArg">42</int>
    </listener>

UpdateHandler

The UpdateHandler API allows you to specify a custom algorithm for determining how sequences of adds and deletes are processed by Solr. The UpdateHandler you wish to use can be configured in your solrconfig.xml, but implementing a new UpdateHandler is considered extremely advanced and is not recommended....

  <updateHandler class="my.package.CustomUpdateHandler">

Building Plugins

To develop your own plugins, add the apache-solr-*.jar jar files to the classpath you use to compile your code. They contains all of the Solr Interfaces and Class files you may need. If you are developing plugins that know about lower level Lucene interfaces, you may need to also include the lucene-*.jar jar files from the lib/ directory of your Solr distribution.

Plugin Initialization

<!> Solr1.3

Plugins are initialized either with init( Map<String,String> args ) or init( NamedList args ).

<!> Solr1.4

Plugins can also be initialized with init( PluginInfo info ). These Plugins can have children ( any Subnode with a "class" attribute is considered a child ). If a pluginInfoInitialized Plugin wants to initialise these children in its inform( core ) method via  core.create.createInitInstance() , the children must not be SolrCoreAware. see PluginInfo. <!> Solr3.1 As of Solr3.1 any subnode which is not a "lst","str","int","bool","arr","float" or "double" is considered a child. (Yes "long" is missing - see SOLR-2541)

ResourceLoaderAware

Classes that need to know about the ResourceLoader can implement ResourceLoaderAware. Valid ResourceLoaderAware include:

  • TokenFilterFactory

  • TokenizerFactory

  • FieldType

SolrCoreAware

Classes that need to know about the [SolrCore] can implement SolrCoreAware. Classes implementing SolrCoreAware must not have a dedicated Constructor. Valid SolrCoreAware classes include:

Lifecycle

The initialization lifecycle is:

  1. Constructor
  2. init( Map / NamedList / PluginInfo )

  3. ResourceLoaderAware classes call: inform( ResourceLoader );

  4. Before the first request is made and after all plugins have been created and registered, SolrCoreAware plugins call: inform( SolrCore );

SolrPlugins (last edited 2017-01-03 19:18:41 by ShawnHeisey)