You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by bu...@apache.org on 2008/05/23 20:58:02 UTC
svn commit: r659626 [1/3] - in /lucene/java/trunk: ./ docs/
src/demo/org/apache/lucene/demo/ src/java/org/apache/lucene/document/
src/java/org/apache/lucene/search/
src/site/src/documentation/content/xdocs/ src/test/org/apache/lucene/
src/test/org/apac...
Author: buschmi
Date: Fri May 23 11:57:55 2008
New Revision: 659626
URL: http://svn.apache.org/viewvc?rev=659626&view=rev
Log:
LUCENE-1290: Deprecate org.apache.lucene.search.Hits, Hit and HitIterator.
Modified:
lucene/java/trunk/CHANGES.txt
lucene/java/trunk/docs/demo2.html
lucene/java/trunk/docs/demo2.pdf
lucene/java/trunk/docs/scoring.html
lucene/java/trunk/docs/scoring.pdf
lucene/java/trunk/src/demo/org/apache/lucene/demo/SearchFiles.java
lucene/java/trunk/src/java/org/apache/lucene/document/Document.java
lucene/java/trunk/src/java/org/apache/lucene/search/Hit.java
lucene/java/trunk/src/java/org/apache/lucene/search/HitIterator.java
lucene/java/trunk/src/java/org/apache/lucene/search/Hits.java
lucene/java/trunk/src/java/org/apache/lucene/search/Searcher.java
lucene/java/trunk/src/site/src/documentation/content/xdocs/demo2.xml
lucene/java/trunk/src/site/src/documentation/content/xdocs/scoring.xml
lucene/java/trunk/src/test/org/apache/lucene/SearchTest.java
lucene/java/trunk/src/test/org/apache/lucene/SearchTestForDuplicates.java
lucene/java/trunk/src/test/org/apache/lucene/TestDemo.java
lucene/java/trunk/src/test/org/apache/lucene/TestHitIterator.java
lucene/java/trunk/src/test/org/apache/lucene/TestSearch.java
lucene/java/trunk/src/test/org/apache/lucene/TestSearchForDuplicates.java
lucene/java/trunk/src/test/org/apache/lucene/ThreadSafetyTest.java
lucene/java/trunk/src/test/org/apache/lucene/analysis/TestKeywordAnalyzer.java
lucene/java/trunk/src/test/org/apache/lucene/document/TestDocument.java
lucene/java/trunk/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
lucene/java/trunk/src/test/org/apache/lucene/index/TestDeletionPolicy.java
lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReader.java
lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriter.java
lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
lucene/java/trunk/src/test/org/apache/lucene/index/TestLazyProxSkipping.java
lucene/java/trunk/src/test/org/apache/lucene/index/TestParallelReader.java
lucene/java/trunk/src/test/org/apache/lucene/queryParser/TestMultiFieldQueryParser.java
lucene/java/trunk/src/test/org/apache/lucene/queryParser/TestQueryParser.java
lucene/java/trunk/src/test/org/apache/lucene/search/CheckHits.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestBoolean2.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestBooleanMinShouldMatch.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestBooleanOr.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestBooleanScorer.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestConstantScoreRangeQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestCustomSearcherSort.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestDateFilter.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestDateSort.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredSearch.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestFuzzyQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestMatchAllDocsQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiSearcher.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiSearcherRanking.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestNot.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestPhrasePrefixQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestPhraseQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestPositionIncrement.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestPrefixFilter.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestPrefixQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestRangeFilter.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestRangeQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestRemoteCachingWrapperFilter.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestRemoteSearchable.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestSearchHitsWithDeletions.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestSort.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestTermVectors.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestTimeLimitedCollector.java
lucene/java/trunk/src/test/org/apache/lucene/search/TestWildcard.java
lucene/java/trunk/src/test/org/apache/lucene/search/function/TestFieldScoreQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/function/TestOrdValues.java
lucene/java/trunk/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
lucene/java/trunk/src/test/org/apache/lucene/store/TestLockFactory.java
Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Fri May 23 11:57:55 2008
@@ -66,6 +66,10 @@
8. LUCENE-852: Let the SpellChecker caller specify IndexWriter mergeFactor
and RAM buffer size. (Otis Gospodnetic)
+
+ 9. LUCENE-1290: Deprecate org.apache.lucene.search.Hits, Hit and HitIterator
+ and remove all references to these classes from the core. Also update demos
+ and tutorials. (Michael Busch)
Bug fixes
Modified: lucene/java/trunk/docs/demo2.html
URL: http://svn.apache.org/viewvc/lucene/java/trunk/docs/demo2.html?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/docs/demo2.html (original)
+++ lucene/java/trunk/docs/demo2.html Fri May 23 11:57:55 2008
@@ -339,14 +339,23 @@
the results from the <span class="codefrag">QueryParser</span> which is passed to
the searcher. Note that it's also possible to programmatically construct a rich <span class="codefrag">Query</span> object without using the query
parser. The query parser just enables decoding the <a href="queryparsersyntax.html">Lucene query
-syntax</a> into the corresponding <span class="codefrag">Query</span> object. The searcher results are
-returned in a collection of Documents called <span class="codefrag">Hits</span> which is then iterated through and
-displayed to the user.
+syntax</a> into the corresponding <span class="codefrag">Query</span> object. Search can be executed in
+two different ways:
+<ul>
+
+<li>Streaming: A <span class="codefrag">HitCollector</span> subclass
+simply prints out the document ID and score for each matching document.</li>
+
+<li>Paging: Using a <span class="codefrag">TopDocCollector</span>
+the search results are printed in pages, sorted by score (i. e. relevance).</li>
+
+</ul>
+
</p>
</div>
-<a name="N100ED"></a><a name="The Web example..."></a>
+<a name="N100FB"></a><a name="The Web example..."></a>
<h2 class="boxed">The Web example...</h2>
<div class="section">
<p>
Modified: lucene/java/trunk/docs/demo2.pdf
URL: http://svn.apache.org/viewvc/lucene/java/trunk/docs/demo2.pdf?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/docs/demo2.pdf (original)
+++ lucene/java/trunk/docs/demo2.pdf Fri May 23 11:57:55 2008
@@ -95,10 +95,10 @@
>>
endobj
20 0 obj
-<< /Length 2152 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2312 /Filter [ /ASCII85Decode /FlateDecode ]
>>
stream
-Gatm=hf%7-&:X@\Tsl:4.n^TLCC^U&F_NdV6b=0`L1Ln&`7Sm;d3YV7hI"$mAB@>E;Z&3_Yt[e[hL0VBh4=C[[J4=@pp'=Z%K(WVUn6m4;&$ho%F+@nIRrBiEG)u[Z?Wi^/8mnr2j[PU$a5]`i1KJFP%!E@*d(LFkO7_1QB`*K,qE,<pm...@p_>Q"*k&bW3S%P=XN[aG<d;5=kP7)<0B@L!\0R(=QC+3BW^LF.Bf`\4imOMK2M$;>UOFhG#=m08aGGVe@Zeu+."MYXgp!S,9M=@kXuDS6WrH7.+f%bf,&,A&-*k*ib2OKL;(]SA4L_aZrVfj`b4:n=6-'GH^>+,gDGb_Sg^C4XC$\<te7e@ZBl[[R[n&`ai+*8fnt=^p(_sWp64iMKCccNTRle,V192lkE"7/pV\&hU$@Ln<'ThpDM#pW9?eE(5_e`=d3=6L#]q4Y`KV#E,5I6n/LBY5$4M)KX$t>)i>(CJU.bk&I"lk.p+&:=@5):Jm3PQKJ5H]J81rfb+Fm2^V/""m$koe"A'QUd_'#YW&JHJClMs:aDcfj&n_@'d`<kXi`+<'FY<a@13rMA[(C#T;Vq51lE^-aPJ*(Ok9l'm0
OE8$=/oEakU>sFu_9,^/MN[-GUI<[S`@A!nB43gg6[8OmrT#N6a/MRE\9;8@dJXWe4VV'J8O@.eQn3Wo.)]H-f=tR!gUFZP5-a<iEJ/Q\i+18&/f:+CE:W1gjM&fO3k3&IHCT2iWEJYJH8lS/5o0c5[9HZ(4MUp5/.d8=3)d/?-k0QfM_:*U)pN*5&\&W2nk,89Kc,:7/^OFlD9X>R6BR98!Eg\9]ch.T-8)knVdj.$h*4UC/c([%6]q^*lbKM(ag.8J/BPHN3IUm<hV<7(4R41:W.tQ(p*(Wg>TH@c9MhEtMFGrF@WObuM<adqWLZI]D(BEJ*X@<R2-)mBP>tY>1*Al%i<M5MU8`_K%Hq=\TFUG7BfWa*%7I&Nn9_GX'H9D36pI8_3&Y?BXa53-nUBm6Uech+6q:#hOpeF"V-NUpmd$QJ&nNu.<pPN7i_Q36Bih.g+i9K;f/-,YlPZh[HC&KkEMj#rbiAbC<,R.!:=Ou7%GsP6Q0QbhKG2S"9]1[FeO'mi'l&Ra80EGVZE$./.CjVh>fkK["Xg[k]SFMB9XS.V3%'ZU\[MA/TPZiuf0oB?=T,lft?1pm.'\i#Jg!*W-Q`D>gN6Y5!Z$[0s&j^jTh#fk7V2,GjkY,S*0nu,BDQ[_;SX?07p]>/i+;`']isr'<*iO>*elK,Io1[F@a/A(mh5%d]!82pl9&QSG+NgL3[",lr4`.cH7K@:9RIjr0Vs.$RFirpX(.:GaorG>Oa':RE@uH.oJnn@]2$XPZ?5.eVB$QKWp\XnLj-r:m4&<`sgm,_^J?AY"]NU_X.AUiD&=K3sn6S,4+5H;:d_,Ea<ai/>9%Fr^2P[mpd//D8/n1B_c%Q+6a9VjnlL?MK1BIWM*bd29VipX%?_>Y8XueXa">CD*!U8*bM2kgrEKCm76T=Tbc>[&Bhn46`qk#j)9@(Od5ChTG4hdt1?I>5O+EPsj+unKW9<YJJ4/PGY?$QqiJT]o]R\f$p\Gk
2`<d]DQ`s2)`5gh(CRlA.A&Ii,ud"(Z5J`2Y.P>[4sUFi+k``>/d8GHML,Qn+(Bo)am_[f*nNC!m4EhE-o<^4e+6&EjpU!5POd,'u55HTb)7AnZj$JGZ8Zru;.L[+-F)XWeo=i6o\^W&Bn[I6rH7<>n,CCZd%fXrs)JGTjPq@Um~>
+Gatm=>B?8n'RnB3i%<&EK0b;t+$.k/S$kE7STa%acH^#DA<:Z9(qC9tao;-"J:SpR`"+r#-5P`7kPCb<..<H<^FV$e?F\PjrdVG6*S[iN+Fp*6Y<LjR5(R'u>H<[c([mY+M`]g:X%1A+Ki:W)nB\K\8O'E]LK_llp%MH1o0S;aK&nP1rg,.Kcmi1GB9-jPeRlYk/D9S_<[KrlbtD7(LMQe@qSue=3nW*VD;&n*=iqg1hcsAEUt5'N?)hAW<W=2,LV-t#oGQLQE['PIqW5%7qh<nL1/$#`o>*&eQA`AbF%<:97u87A`)Kq$.=\poM12s\\F,%K'4FL\gDpVK1?E\/r,O<0^J[0CPnoF.e8^/oUtoWgk"-^AEebFBIJ2I"'?(HLSo@a\i2Asl_9j2Q7ntOVp!pEZgrT1_Q0oati0A?'o4#uq:2#E[A0J53S/$)gTtY:IOh&:Ga#5Pl@bYUNjQ\i%5T@P,44pYFp&fB"1JT:dJ.1OYe;'/r-r-j/X%$S5;Me=bYIL_m)3&l@_T''kV1b(!MB7#.RGXNHW?;"\e6,r<6"Gt>/]<ZFUgGI4qIMHDRUc;=_=GN8@"l'_;kB$Hl@k[f4e%,@^lk_[^F<#ZfJK/R+gL9.'UumenBj4.J:jWRN(B#H@'N781R(.Z6>[Q;B9ji`,24!X,1SmmQcRXd7%(DpWXqai0kK:(KWGq#7@kFPoUimb\hN-?E>%gNYKm_dj0p0!+nlE2>oMFJ.5fhlHlD[Vo+pS'1n95->TRu+S>/F6QcK?B1>.\WgscgOPg&?KOISZXlQCjFM@:SP"pCa7?m<M8p_UAWa"U\.>)p0$\m>Vc#GELrj%jJ=nmOoR&C2U(RR'^=8IMb>D23I-XC+.fkL5:!^k50gRe*M!prDK7TBEF$U,F#!-5k9YU)_*2SjH.q:kB6g-#hj7AO(\*V'knQ=l=uf.]_@J8LIQTJZ[X(W;39"7rdU7<qVrnDY;b.ilJFT`gZn
tNt5:/8:?8$7V]OV2(3/E[5_(21j7j.TQ('&*k^Z0-!R-$.`Be<AV1Uo!4XE_3Y`h\.Y!s&Ri58a&2jm.5SVu\L(/]'9<?bo$:3j39Yibu`iJiH.1-d^RRQ_>F9`@nN-`S7QL_'`^(.nY/:&>(Om[cr(\o8;O:?Z#mEI\rgV1L?,BqDas9Tm<e'o.9#Kcj"rN4PQt_T15$aP%U4Km(:t8OD`S%So-!#E/to3"GU_VdZ>V-N#l-I)U=?N?UHh8kW^10[8?k2,d_PS3^tA!hajou!VY$rs$&geA5]Wk*rN(0!5ZhMia8Q=,WXDfR"V/Fa9(nn3";hYW1"r!CM<u^-.2<CT+O6obTTcEJjU;'0%Y]X$KiSF:lo&.53\lmJ%bmu'e(9s+jf&9*`h"/??`lm^;"_1RH)+'1AjF=Zo$KE'r!Ngjn\Q!d"=CXFm.(ltjd-Vc?%N6HB+JGmi!5t*0]Qp^VjU\XSB),ZWG4h15dJG1hXmH#FT;k<=./"IY*Ie5M]6O6;fl%=BYuV6&@V<<Ou'n^#=t8RL3g;^^c)V?n$4Y2)8d1s9Ebk?m*:i!McD\#5nAFQG_^Fp/%JMn[f`q*Yfpob7q`a1T2]\'Un:3YoH)We55(h3nXSN*Asb:f1eCBD8j-IIUH&#MBT@<i$p2BJ6E)tAnXQ]iZCLJRc2boJqYG)-?i:D`JOh(pdo6r+;F+FcYA?t'DOU[:2D@gNZ&[jh.+/60FBnD=YCl\+QqRp&.h&(H4=Q1[,&feJVdd>oJIZ%f!8-VhUUn88/b2"hrr`qc4`]0V`]KQ>2@/C$cG<!6gR^oo/O,-P4YXHnk*a,HJD/sI<0sWdk8<&H!IZenP`bR4*=^ECgBl6YM(uE>42!^3X"+M"o>2!r35Z=2PSc+Sp@Rlc+LGd4AcTQLNTpC+brVFB;,LG&]&;tBEdoU'Zf2Qe-dj5iN-k,gh\_$?%b+JCmb*>1e<%(;`k/8pi#Dh!j%NZmK:"
f,#m=X\pe\a>*inV;riZ>%a7MoQ0,$1TSNT3#&>jH&1fjBMW;DRX:5<320Yj&%5o!4H[-GH*:<j_'M,0cMK9ebV9\AnpDr,U36EJ8*-fUic_9``80;7[G]i5pN,fX7X0T^L>DN*+-VF=rV\HSjC4LbV3I(W\NSpb,%O.0UZA@^A30a3onMRh9f^45bZ5eCA`A)02`*Ao1@JC$ejTF=Q&4lcq$Bfl\n!Q"EUhlC#>\)Y95+pr4-S#tPjrNd-+D%/mA<$s3dh0qd4-g4XP/8,g?V=j[kY)C3&baKo'Z@iOk]:V9E24*@JU-;eV22=s*=C6cjNr'@#b^c#~>
endstream
endobj
21 0 obj
@@ -233,7 +233,7 @@
17 0 obj
<<
/S /GoTo
-/D [21 0 R /XYZ 85.0 335.866 null]
+/D [21 0 R /XYZ 85.0 290.266 null]
>>
endobj
22 0 obj
@@ -244,39 +244,39 @@
xref
0 34
0000000000 65535 f
-0000008534 00000 n
-0000008606 00000 n
-0000008698 00000 n
+0000008694 00000 n
+0000008766 00000 n
+0000008858 00000 n
0000000015 00000 n
0000000071 00000 n
0000000777 00000 n
0000000897 00000 n
0000000950 00000 n
-0000008832 00000 n
+0000008992 00000 n
0000001085 00000 n
-0000008895 00000 n
+0000009055 00000 n
0000001221 00000 n
-0000008961 00000 n
+0000009121 00000 n
0000001358 00000 n
-0000009027 00000 n
+0000009187 00000 n
0000001495 00000 n
-0000009091 00000 n
+0000009251 00000 n
0000001632 00000 n
0000004447 00000 n
0000004555 00000 n
-0000006800 00000 n
-0000009157 00000 n
-0000006908 00000 n
-0000007081 00000 n
-0000007316 00000 n
-0000007482 00000 n
-0000007677 00000 n
-0000007872 00000 n
-0000007985 00000 n
-0000008095 00000 n
-0000008203 00000 n
-0000008309 00000 n
-0000008425 00000 n
+0000006960 00000 n
+0000009317 00000 n
+0000007068 00000 n
+0000007241 00000 n
+0000007476 00000 n
+0000007642 00000 n
+0000007837 00000 n
+0000008032 00000 n
+0000008145 00000 n
+0000008255 00000 n
+0000008363 00000 n
+0000008469 00000 n
+0000008585 00000 n
trailer
<<
/Size 34
@@ -284,5 +284,5 @@
/Info 4 0 R
>>
startxref
-9208
+9368
%%EOF
Modified: lucene/java/trunk/docs/scoring.html
URL: http://svn.apache.org/viewvc/lucene/java/trunk/docs/scoring.html?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/docs/scoring.html (original)
+++ lucene/java/trunk/docs/scoring.html Fri May 23 11:57:55 2008
@@ -494,9 +494,9 @@
, beginning the scoring process.
</p>
<p>Once inside the Searcher, a
- <a href="api/org/apache/lucene/search/Hits.html">Hits</a>
- object is constructed, which handles the scoring and caching of the search results.
- The Hits constructor stores references to three or four important objects:
+ <a href="api/org/apache/lucene/search/HitCollector.html">HitCollector</a>
+ is used for the scoring and sorting of the search results.
+ These important objects are involved in a search:
<ol>
<li>The
@@ -521,12 +521,11 @@
</ol>
</p>
-<p>Now that the Hits object has been initialized, it begins the process of identifying documents that
- match the query by calling getMoreDocs method. Assuming we are not sorting (since sorting doesn't
+<p> Assuming we are not sorting (since sorting doesn't
effect the raw Lucene score),
- we call on the "expert" search method of the Searcher, passing in our
+ we call one of the search method of the Searcher, passing in the
<a href="api/org/apache/lucene/search/Weight.html">Weight</a>
- object,
+ object created by Searcher.createWeight(Query),
<a href="api/org/apache/lucene/search/Filter.html">Filter</a>
and the number of results we want. This method
returns a
Modified: lucene/java/trunk/docs/scoring.pdf
URL: http://svn.apache.org/viewvc/lucene/java/trunk/docs/scoring.pdf?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/docs/scoring.pdf (original)
+++ lucene/java/trunk/docs/scoring.pdf Fri May 23 11:57:55 2008
@@ -213,10 +213,10 @@
>>
endobj
40 0 obj
-<< /Length 2130 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2003 /Filter [ /ASCII85Decode /FlateDecode ]
>>
stream
-Gatm=99\*g%)2U?BQ?["ZXH88eOq9n9t/Aoh<*)OJX0u=M-_@)3:<t'-!;!3Odf&mPM*$FMZiMMp],?,Y#d:-X"Q!im*sA)<U(d[M5!Q>+,&JA,<nGE_l9tF]jEp.Y9%&*%eeBglg;j^(V/fQG(t^ELE\Zretr!4"&94JC&ZJ)jRkSt&6[7\[@9A$$6fTfkiUjrft*cH$VGY$M.Orr,`tgWb":C?LImS8P8l^.4VJWqaQ]"2o.%9UWe@Z&gJ;iWZHm'Z?MMQDs#rfc:Jiein;2N=H(Bf@M`oE>9%(ZNSaL]PEVDP:e&68$cEVlpiMCT&%8KbWL'ED=qg*3j#7!V8FL0a*`I9Y2'qi[6-VZt/S:-#:lFGia.#?.uK/c1W9S(K]iDl6j:eBh:kg04u%=X"NK)@SGrPH@VB3fOPic@S4S<UnUBG`6iYs6t#@H:S>?FM&9Oc/89Jj0Mo-C#[PPcVG,N;3#;X%B6?9=fO^T@m"6RF%"W2`^R6i-I,p?9!Q&!H>7,Q^1Yir=OEWk2PT[iH7L%8#L[E]QsbN]6Z7rs7YHi$XhguFjX6Q;D*FsM*M8:Lsl<cUd5up,ka\II9:s;:3!#`QWDaj-q:0T:MfBuqS*,O5o?7k\^;p5/)Go#Q:V:e%t7[465IU5Y%gO^3GF2C9qr<3h"/,5m4EU34m2j"f,9928h/IG./sWS'C`)J>I&kZgX5bYKS'7LJ+S.nF,N2=eI)R#^^1j/N15,G_W.Lp[b@"eL1R02Hg8:s1ej\#kk'C#7&J$!/`fKDCmqM4!edWalag.)>m%YrFN:Cr(,sn5`\88aE$LU-(n@=5"NslC&s"][eVJfWK&uVdL7=n4NCfLpRnkM?Au%0s7EO:Xbo^>o_k+\@lrCV30Z2*g(m?a#g"ldn++$rJe_<12'V(&hO90C=)SWAdIWc7a[SRV/VOq`eOqtKbi=osU>A`[A8??WB/kIAPfSa*qreK`;I=4VG%1[f^Cq!d
<#\4lnI=9aUqVJAK,9*#7P4At2/Z4RpP?*k1>e.(3!s#A^9-Fj7'339A=mcU#LD31*Y[ua?-&CB36;(OB'fJS*IUdAc/(XHlde7KS>7uk^&$)(.qUD^:TW#+LX&mcdR4s#]rlMPBOqj-p=UKh6PtJHLe;!OGjX3>(]hqMl_Qn3b[3S7`*3.TPRpsVu+TuE7Y#U2/doQ'>1c/^sUZSWMoHU_k%?Q,$@ofa1`Ldf-43E*j2FPa(6)gP3][WRPTql^9K2o-6e^Q;[3>IM%gk`)1aS&kRD_r08`0>F#SV+V2K>rXDN@)7/mcG#3<g\R/X6+.Ikf(1:a[A#*9$ZIs:607k4r6]G_dk6"h;+78bVk3(d:id479?(LrZ.9-<MZ8]LY24\IGj#t.n!TVlONEW%PpN]CmQO'ZC;)NotuBtf`4\[MhQFN7<K\g9t+=YW-[S>O=.6cN)m:!:N%:\R%<IQ!qEUVJbSB;7ZFA@m/;C)rO;Nd!<O>O(5>D[)\4f*)!kJ2URU!`fP40-g?bS[>.*Gr^'Xa?0FUA?TEYb*NAGX=j4$gASB@/8EWa5=\o./I>rXh`#OahqA9CbncVW!W43i!RB3d2N/:26R.FCn#$[83PQIWFjod:#9q:[AtCF-'BV3[JZl#TM/^^`b3am[L;1n9/cA#Pd,(X.lq(%oa9CLJ^X2dfV59H=>)-nh7m>N[(+daB+1*.ss))PC,56Mc_KmW.6ak.m:O_*)A(`E?>&[hPV9?p$\mm'g*iS21CUD2i_bZ[lih<+DkEEeTn4V05c'].LB_[Z,Ri]WNdsj]!+m\eCk\^$p*&-K&(XN/BNkAgC>C3YTus0#\>p:eTOciq':[A;LWn[C\Q+%_p_X=&i#1I@qjpdBYru[p0pd(Nm20Iff[7(qgFN0unG]=c=2U6T5Pm:"!(nF*,EX4hgQY"9j_<Yo*?DHg+r8P=?STqp"+;V/bS4U#>jr,>Gc#/kLfP7;"PafjQg/EHo
("F-.8^pN>6\^()(k8ct<r-[X_CIp2oq6Jr=@hX:C:JeB^H6LYd.*-TqtTp#W%[8U2!e]j5;#o4mODgERu,gUV.8NNF8"p)NfbLcDf*_sW.nB#7tWcLJX#8(&r$qQ#tlP;a_rN4q%Q<1m##P.CS9)~>
+Gatm<96...@QBI.k9pX.hun>K@&.Pn923_jRr0hs#5NG'G`-s@Cr2l(9/_>=nB(2(&PJ8mpcuj,)jCdpE^UcHShd)$oWVV0G7MI%=EiL9s7g0X0rHf8-S`EHO"8R9#&d<!M,$?O.TT*[eA?1?+U4F3?-OlY8"PPF=l^6eb)5`@(.)mAAQ&W:d/?mMk1Zb:mXd8^A,Me$<Bf#dX)D36h?VCQb9>?P[I0.6EPg"47l%<Lm`NnB,CK30CP;;/-r&f<.BMB[Sd_Prd7Ed"D-%qSYQGl%:=M5Nl(]1#)]n&\qSG8g5=Qki@e4Fj*W>?^3-<"j'W[5X7_T\&&>&<ACKXqn&c&>J6j]TC04k
q2B#n*.q4[qO^/.k=:[e<JL...@o7dSf>i+4;t\rK@%LiAIE`h.u"_e*V?nh^[2XKhfhW?GOdVt/e-b?GF"7+b:4)XjhbHkaNT"jqA'+Mq03nd&gkcCU*qAN!@#")i/QG'DW#Z65-9E93/@mQN2qZ:MU9$d23"CrMcLBfAYUh#oI(Uql_g8_W^e+95Miq3iteh/4&L5.TaVSo;5)Lqp<)mM^
ab[feJRYEAN7W<VcTqQ]$F~>
endstream
endobj
41 0 obj
@@ -484,39 +484,39 @@
xref
0 63
0000000000 65535 f
-0000017942 00000 n
-0000018035 00000 n
-0000018127 00000 n
+0000017815 00000 n
+0000017908 00000 n
+0000018000 00000 n
0000000015 00000 n
0000000071 00000 n
0000001068 00000 n
0000001188 00000 n
0000001297 00000 n
-0000018250 00000 n
+0000018123 00000 n
0000001432 00000 n
-0000018313 00000 n
+0000018186 00000 n
0000001569 00000 n
-0000018379 00000 n
+0000018252 00000 n
0000001706 00000 n
-0000018445 00000 n
+0000018318 00000 n
0000001843 00000 n
-0000018509 00000 n
+0000018382 00000 n
0000001979 00000 n
-0000018575 00000 n
+0000018448 00000 n
0000002116 00000 n
-0000018641 00000 n
+0000018514 00000 n
0000002253 00000 n
-0000018705 00000 n
+0000018578 00000 n
0000002389 00000 n
-0000018771 00000 n
+0000018644 00000 n
0000002526 00000 n
-0000018837 00000 n
+0000018710 00000 n
0000002663 00000 n
-0000018901 00000 n
+0000018774 00000 n
0000002799 00000 n
-0000018967 00000 n
+0000018840 00000 n
0000002935 00000 n
-0000019033 00000 n
+0000018906 00000 n
0000003072 00000 n
0000005698 00000 n
0000005806 00000 n
@@ -524,28 +524,28 @@
0000008243 00000 n
0000010669 00000 n
0000010777 00000 n
-0000013000 00000 n
-0000013108 00000 n
-0000014526 00000 n
-0000019098 00000 n
-0000014634 00000 n
-0000014797 00000 n
-0000014985 00000 n
-0000015205 00000 n
-0000015404 00000 n
-0000015715 00000 n
-0000015919 00000 n
-0000016112 00000 n
-0000016327 00000 n
-0000016648 00000 n
-0000016828 00000 n
-0000017013 00000 n
-0000017230 00000 n
-0000017386 00000 n
-0000017499 00000 n
-0000017609 00000 n
-0000017717 00000 n
-0000017833 00000 n
+0000012873 00000 n
+0000012981 00000 n
+0000014399 00000 n
+0000018971 00000 n
+0000014507 00000 n
+0000014670 00000 n
+0000014858 00000 n
+0000015078 00000 n
+0000015277 00000 n
+0000015588 00000 n
+0000015792 00000 n
+0000015985 00000 n
+0000016200 00000 n
+0000016521 00000 n
+0000016701 00000 n
+0000016886 00000 n
+0000017103 00000 n
+0000017259 00000 n
+0000017372 00000 n
+0000017482 00000 n
+0000017590 00000 n
+0000017706 00000 n
trailer
<<
/Size 63
@@ -553,5 +553,5 @@
/Info 4 0 R
>>
startxref
-19149
+19022
%%EOF
Modified: lucene/java/trunk/src/demo/org/apache/lucene/demo/SearchFiles.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/demo/org/apache/lucene/demo/SearchFiles.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/demo/org/apache/lucene/demo/SearchFiles.java (original)
+++ lucene/java/trunk/src/demo/org/apache/lucene/demo/SearchFiles.java Fri May 23 11:57:55 2008
@@ -17,22 +17,24 @@
* limitations under the License.
*/
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Date;
+
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.FilterIndexReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.HitCollector;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
+import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Searcher;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.Date;
+import org.apache.lucene.search.TopDocCollector;
/** Simple command-line based search demo. */
public class SearchFiles {
@@ -60,7 +62,8 @@
/** Simple command-line based search demo. */
public static void main(String[] args) throws Exception {
String usage =
- "Usage: java org.apache.lucene.demo.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-raw] [-norms field]";
+ "Usage:\tjava org.apache.lucene.demo.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-raw] [-norms field] [-paging hitsPerPage]";
+ usage += "\n\tSpecify 'false' for hitsPerPage to use streaming instead of paging search.";
if (args.length > 0 && ("-h".equals(args[0]) || "-help".equals(args[0]))) {
System.out.println(usage);
System.exit(0);
@@ -72,6 +75,8 @@
int repeat = 0;
boolean raw = false;
String normsField = null;
+ boolean paging = true;
+ int hitsPerPage = 10;
for (int i = 0; i < args.length; i++) {
if ("-index".equals(args[i])) {
@@ -91,6 +96,16 @@
} else if ("-norms".equals(args[i])) {
normsField = args[i+1];
i++;
+ } else if ("-paging".equals(args[i])) {
+ if (args[i+1].equals("false")) {
+ paging = false;
+ } else {
+ hitsPerPage = Integer.parseInt(args[i+1]);
+ if (hitsPerPage == 0) {
+ paging = false;
+ }
+ }
+ i++;
}
}
@@ -125,53 +140,149 @@
Query query = parser.parse(line);
System.out.println("Searching for: " + query.toString(field));
- Hits hits = searcher.search(query);
-
+
if (repeat > 0) { // repeat & time as benchmark
Date start = new Date();
for (int i = 0; i < repeat; i++) {
- hits = searcher.search(query);
+ searcher.search(query, null, 100);
}
Date end = new Date();
System.out.println("Time: "+(end.getTime()-start.getTime())+"ms");
}
- System.out.println(hits.length() + " total matching documents");
+ if (paging) {
+ doPagingSearch(in, searcher, query, hitsPerPage, raw, queries == null);
+ } else {
+ doStreamingSearch(searcher, query);
+ }
+ }
+ reader.close();
+ }
+
+ /**
+ * This method uses a custom HitCollector implementation which simply prints out
+ * the docId and score of every matching document.
+ *
+ * This simulates the streaming search use case, where all hits are supposed to
+ * be processed, regardless of their relevance.
+ */
+ public static void doStreamingSearch(final Searcher searcher, Query query) throws IOException {
+ HitCollector streamingHitCollector = new HitCollector() {
+
+ // simply print docId and score of every matching document
+ public void collect(int doc, float score) {
+ System.out.println("doc="+doc+" score="+score);
+ }
+
+ };
+
+ searcher.search(query, streamingHitCollector);
+ }
+
+ /**
+ * This demonstrates a typical paging search scenario, where the search engine presents
+ * pages of size n to the user. The user can then go to the next page if interested in
+ * the next hits.
+ *
+ * When the query is executed for the first time, then only enough results are collected
+ * to fill 5 result pages. If the user wants to page beyond this limit, then the query
+ * is executed another time and all hits are collected.
+ *
+ */
+ public static void doPagingSearch(BufferedReader in, Searcher searcher, Query query,
+ int hitsPerPage, boolean raw, boolean interactive) throws IOException {
+
+ // Collect enough docs to show 5 pages
+ TopDocCollector collector = new TopDocCollector(5 * hitsPerPage);
+ searcher.search(query, collector);
+ ScoreDoc[] hits = collector.topDocs().scoreDocs;
+
+ int numTotalHits = collector.getTotalHits();
+ System.out.println(numTotalHits + " total matching documents");
- final int HITS_PER_PAGE = 10;
- for (int start = 0; start < hits.length(); start += HITS_PER_PAGE) {
- int end = Math.min(hits.length(), start + HITS_PER_PAGE);
- for (int i = start; i < end; i++) {
-
- if (raw) { // output raw format
- System.out.println("doc="+hits.id(i)+" score="+hits.score(i));
- continue;
- }
-
- Document doc = hits.doc(i);
- String path = doc.get("path");
- if (path != null) {
- System.out.println((i+1) + ". " + path);
- String title = doc.get("title");
- if (title != null) {
- System.out.println(" Title: " + doc.get("title"));
- }
- } else {
- System.out.println((i+1) + ". " + "No path for this document");
+ int start = 0;
+ int end = Math.min(numTotalHits, hitsPerPage);
+
+ while (true) {
+ if (end > hits.length) {
+ System.out.println("Only results 1 - " + hits.length +" of " + numTotalHits + " total matching documents collected.");
+ System.out.println("Collect more (y/n) ?");
+ String line = in.readLine();
+ if (line.length() == 0 || line.charAt(0) == 'n') {
+ break;
+ }
+
+ collector = new TopDocCollector(numTotalHits);
+ searcher.search(query, collector);
+ hits = collector.topDocs().scoreDocs;
+ }
+
+ end = Math.min(hits.length, start + hitsPerPage);
+
+ for (int i = start; i < end; i++) {
+ if (raw) { // output raw format
+ System.out.println("doc="+hits[i].doc+" score="+hits[i].score);
+ continue;
+ }
+
+ Document doc = searcher.doc(hits[i].doc);
+ String path = doc.get("path");
+ if (path != null) {
+ System.out.println((i+1) + ". " + path);
+ String title = doc.get("title");
+ if (title != null) {
+ System.out.println(" Title: " + doc.get("title"));
}
+ } else {
+ System.out.println((i+1) + ". " + "No path for this document");
}
+
+ }
- if (queries != null) // non-interactive
- break;
-
- if (hits.length() > end) {
- System.out.println("more (y/n) ? ");
- line = in.readLine();
- if (line.length() == 0 || line.charAt(0) == 'n')
+ if (!interactive) {
+ break;
+ }
+
+ if (numTotalHits >= end) {
+ boolean quit = false;
+ while (true) {
+ System.out.print("Press ");
+ if (start - hitsPerPage >= 0) {
+ System.out.print("(p)revious page, ");
+ }
+ if (start + hitsPerPage < numTotalHits) {
+ System.out.print("(n)ext page, ");
+ }
+ System.out.println("(q)uit or enter number to jump to a page.");
+
+ String line = in.readLine();
+ if (line.length() == 0 || line.charAt(0)=='q') {
+ quit = true;
+ break;
+ }
+ if (line.charAt(0) == 'p') {
+ start = Math.max(0, start - hitsPerPage);
+ break;
+ } else if (line.charAt(0) == 'n') {
+ if (start + hitsPerPage < numTotalHits) {
+ start+=hitsPerPage;
+ }
break;
+ } else {
+ int page = Integer.parseInt(line);
+ if ((page - 1) * hitsPerPage < numTotalHits) {
+ start = (page - 1) * hitsPerPage;
+ break;
+ } else {
+ System.out.println("No such page");
+ }
+ }
}
+ if (quit) break;
+ end = Math.min(numTotalHits, start + hitsPerPage);
}
+
}
- reader.close();
+
}
}
Modified: lucene/java/trunk/src/java/org/apache/lucene/document/Document.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/document/Document.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/document/Document.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/document/Document.java Fri May 23 11:57:55 2008
@@ -18,7 +18,7 @@
*/
import java.util.*; // for javadoc
-import org.apache.lucene.search.Hits; // for javadoc
+import org.apache.lucene.search.ScoreDoc; // for javadoc
import org.apache.lucene.search.Searcher; // for javadoc
import org.apache.lucene.index.IndexReader; // for javadoc
@@ -32,7 +32,7 @@
*
* <p>Note that fields which are <i>not</i> {@link Fieldable#isStored() stored} are
* <i>not</i> available in documents retrieved from the index, e.g. with {@link
- * Hits#doc(int)}, {@link Searcher#doc(int)} or {@link
+ * ScoreDoc#doc}, {@link Searcher#doc(int)} or {@link
* IndexReader#document(int)}.
*/
Modified: lucene/java/trunk/src/java/org/apache/lucene/search/Hit.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/Hit.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/Hit.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/Hit.java Fri May 23 11:57:55 2008
@@ -26,6 +26,7 @@
* Wrapper used by {@link HitIterator} to provide a lazily loaded hit
* from {@link Hits}.
*
+ * @deprecated Hits will be removed in Lucene 3.0. Use {@link TopDocCollector} and {@link TopDocs} instead.
* @author Jeremy Rayner
*/
public class Hit implements java.io.Serializable {
Modified: lucene/java/trunk/src/java/org/apache/lucene/search/HitIterator.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/HitIterator.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/HitIterator.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/HitIterator.java Fri May 23 11:57:55 2008
@@ -25,6 +25,7 @@
* {@link Hits#iterator()} returns an instance of this class. Calls to {@link #next()}
* return a {@link Hit} instance.
*
+ * @deprecated Hits will be removed in Lucene 3.0. Use {@link TopDocCollector} and {@link TopDocs} instead.
* @author Jeremy Rayner
*/
public class HitIterator implements Iterator {
@@ -76,3 +77,4 @@
}
}
+
Modified: lucene/java/trunk/src/java/org/apache/lucene/search/Hits.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/Hits.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/Hits.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/Hits.java Fri May 23 11:57:55 2008
@@ -38,6 +38,19 @@
* {@link java.util.ConcurrentModificationException ConcurrentModificationException}
* is thrown when accessing hit <code>n</code> ≥ current_{@link #length()}
* (but <code>n</code> < {@link #length()}_at_start).
+ *
+ * @deprecated Hits will be removed in Lucene 3.0. <p>
+ * Instead e. g. {@link TopDocCollector} and {@link TopDocs} can be used:<br>
+ * <pre>
+ * TopDocCollector collector = new TopDocCollector(hitsPerPage);
+ * searcher.search(query, collector);
+ * ScoreDoc[] hits = collector.topDocs().scoreDocs;
+ * for (int i = 0; i < hits.length; i++) {
+ * int docId = hits[i].doc;
+ * Document d = searcher.doc(docId);
+ * // do something with current hit
+ * ...
+ * </pre>
*/
public final class Hits {
private Weight weight;
Modified: lucene/java/trunk/src/java/org/apache/lucene/search/Searcher.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/Searcher.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/Searcher.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/Searcher.java Fri May 23 11:57:55 2008
@@ -33,6 +33,8 @@
/** Returns the documents matching <code>query</code>.
* @throws BooleanQuery.TooManyClauses
+ * @deprecated Hits will be removed in Lucene 3.0. Use
+ * {@link #search(Query, Filter, int))} instead.
*/
public final Hits search(Query query) throws IOException {
return search(query, (Filter)null);
@@ -41,6 +43,8 @@
/** Returns the documents matching <code>query</code> and
* <code>filter</code>.
* @throws BooleanQuery.TooManyClauses
+ * @deprecated Hits will be removed in Lucene 3.0. Use
+ * {@link #search(Query, Filter, int))} instead.
*/
public Hits search(Query query, Filter filter) throws IOException {
return new Hits(this, query, filter);
@@ -49,6 +53,8 @@
/** Returns documents matching <code>query</code> sorted by
* <code>sort</code>.
* @throws BooleanQuery.TooManyClauses
+ * @deprecated Hits will be removed in Lucene 3.0. Use
+ * {@link #search(Query, Filter, int, Sort))} instead.
*/
public Hits search(Query query, Sort sort)
throws IOException {
@@ -58,13 +64,15 @@
/** Returns documents matching <code>query</code> and <code>filter</code>,
* sorted by <code>sort</code>.
* @throws BooleanQuery.TooManyClauses
+ * @deprecated Hits will be removed in Lucene 3.0. Use
+ * {@link #search(Query, Filter, int, Sort))} instead.
*/
public Hits search(Query query, Filter filter, Sort sort)
throws IOException {
return new Hits(this, query, filter, sort);
}
- /** Expert: Low-level search implementation with arbitrary sorting. Finds
+ /** Search implementation with arbitrary sorting. Finds
* the top <code>n</code> hits for <code>query</code>, applying
* <code>filter</code> if non-null, and sorting the hits by the criteria in
* <code>sort</code>.
@@ -105,7 +113,7 @@
*
* <p>Applications should only use this if they need <i>all</i> of the
* matching documents. The high-level search API ({@link
- * Searcher#search(Query)}) is usually more efficient, as it skips
+ * Searcher#search(Query, Filter, int))}) is usually more efficient, as it skips
* non-high-scoring hits.
*
* @param query to match documents
@@ -118,13 +126,9 @@
search(createWeight(query), filter, results);
}
- /** Expert: Low-level search implementation. Finds the top <code>n</code>
+ /** Finds the top <code>n</code>
* hits for <code>query</code>, applying <code>filter</code> if non-null.
*
- * <p>Called by {@link Hits}.
- *
- * <p>Applications should usually call {@link Searcher#search(Query)} or
- * {@link Searcher#search(Query,Filter)} instead.
* @throws BooleanQuery.TooManyClauses
*/
public TopDocs search(Query query, Filter filter, int n)
Modified: lucene/java/trunk/src/site/src/documentation/content/xdocs/demo2.xml
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/site/src/documentation/content/xdocs/demo2.xml?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/site/src/documentation/content/xdocs/demo2.xml (original)
+++ lucene/java/trunk/src/site/src/documentation/content/xdocs/demo2.xml Fri May 23 11:57:55 2008
@@ -118,10 +118,14 @@
href="api/org/apache/lucene/search/Query.html">Query</a></code> object without using the query
parser. The query parser just enables decoding the <a href="queryparsersyntax.html">Lucene query
syntax</a> into the corresponding <code><a
-href="api/org/apache/lucene/search/Query.html">Query</a></code> object. The searcher results are
-returned in a collection of Documents called <code><a
-href="api/org/apache/lucene/search/Hits.html">Hits</a></code> which is then iterated through and
-displayed to the user.
+href="api/org/apache/lucene/search/Query.html">Query</a></code> object. Search can be executed in
+two different ways:
+<ul>
+<li>Streaming: A <code><a href="api/org/apache/lucene/search/HitCollector.html">HitCollector</a></code> subclass
+simply prints out the document ID and score for each matching document.</li>
+<li>Paging: Using a <code><a href="api/org/apache/lucene/search/TopDocCollector.html">TopDocCollector</a></code>
+the search results are printed in pages, sorted by score (i. e. relevance).</li>
+</ul>
</p>
</section>
@@ -137,3 +141,4 @@
</body>
</document>
+
Modified: lucene/java/trunk/src/site/src/documentation/content/xdocs/scoring.xml
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/site/src/documentation/content/xdocs/scoring.xml?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/site/src/documentation/content/xdocs/scoring.xml (original)
+++ lucene/java/trunk/src/site/src/documentation/content/xdocs/scoring.xml Fri May 23 11:57:55 2008
@@ -207,9 +207,9 @@
, beginning the scoring process.
</p>
<p>Once inside the Searcher, a
- <a href="api/org/apache/lucene/search/Hits.html">Hits</a>
- object is constructed, which handles the scoring and caching of the search results.
- The Hits constructor stores references to three or four important objects:
+ <a href="api/org/apache/lucene/search/HitCollector.html">HitCollector</a>
+ is used for the scoring and sorting of the search results.
+ These important objects are involved in a search:
<ol>
<li>The
<a href="api/org/apache/lucene/search/Weight.html">Weight</a>
@@ -228,12 +228,11 @@
</li>
</ol>
</p>
- <p>Now that the Hits object has been initialized, it begins the process of identifying documents that
- match the query by calling getMoreDocs method. Assuming we are not sorting (since sorting doesn't
+ <p> Assuming we are not sorting (since sorting doesn't
effect the raw Lucene score),
- we call on the "expert" search method of the Searcher, passing in our
+ we call one of the search method of the Searcher, passing in the
<a href="api/org/apache/lucene/search/Weight.html">Weight</a>
- object,
+ object created by Searcher.createWeight(Query),
<a href="api/org/apache/lucene/search/Filter.html">Filter</a>
and the number of results we want. This method
returns a
@@ -288,4 +287,4 @@
</section>
</section>
</body>
-</document>
\ No newline at end of file
+</document>
Modified: lucene/java/trunk/src/test/org/apache/lucene/SearchTest.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/SearchTest.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/SearchTest.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/SearchTest.java Fri May 23 11:57:55 2008
@@ -59,7 +59,6 @@
// "\"a c\"",
"\"a c e\"",
};
- Hits hits = null;
QueryParser parser = new QueryParser("contents", analyzer);
parser.setPhraseSlop(4);
@@ -72,12 +71,12 @@
//DateFilter filter = DateFilter.Before("modified", Time(1997,00,01));
//System.out.println(filter);
- hits = searcher.search(query);
+ ScoreDoc[] hits = searcher.search(query, null, docs.length).scoreDocs;
- System.out.println(hits.length() + " total results");
- for (int i = 0 ; i < hits.length() && i < 10; i++) {
- Document d = hits.doc(i);
- System.out.println(i + " " + hits.score(i)
+ System.out.println(hits.length + " total results");
+ for (int i = 0 ; i < hits.length && i < 10; i++) {
+ Document d = searcher.doc(hits[i].doc);
+ System.out.println(i + " " + hits[i].score
// + " " + DateField.stringToDate(d.get("modified"))
+ " " + d.get("contents"));
}
Modified: lucene/java/trunk/src/test/org/apache/lucene/SearchTestForDuplicates.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/SearchTestForDuplicates.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/SearchTestForDuplicates.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/SearchTestForDuplicates.java Fri May 23 11:57:55 2008
@@ -19,12 +19,18 @@
import java.io.IOException;
-import org.apache.lucene.store.*;
-import org.apache.lucene.document.*;
-import org.apache.lucene.analysis.*;
-import org.apache.lucene.index.*;
-import org.apache.lucene.search.*;
-import org.apache.lucene.queryParser.*;
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.SimpleAnalyzer;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.Searcher;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.RAMDirectory;
class SearchTestForDuplicates {
@@ -52,15 +58,15 @@
// try a search without OR
Searcher searcher = new IndexSearcher(directory);
- Hits hits = null;
+ ScoreDoc[] hits = null;
QueryParser parser = new QueryParser(PRIORITY_FIELD, analyzer);
Query query = parser.parse(HIGH_PRIORITY);
System.out.println("Query: " + query.toString(PRIORITY_FIELD));
- hits = searcher.search(query);
- printHits(hits);
+ hits = searcher.search(query, null, 1000).scoreDocs;
+ printHits(hits, searcher);
searcher.close();
@@ -73,8 +79,8 @@
query = parser.parse(HIGH_PRIORITY + " OR " + MED_PRIORITY);
System.out.println("Query: " + query.toString(PRIORITY_FIELD));
- hits = searcher.search(query);
- printHits(hits);
+ hits = searcher.search(query, null, 1000).scoreDocs;
+ printHits(hits, searcher);
searcher.close();
@@ -84,11 +90,11 @@
}
}
- private static void printHits( Hits hits ) throws IOException {
- System.out.println(hits.length() + " total results\n");
- for (int i = 0 ; i < hits.length(); i++) {
+ private static void printHits( ScoreDoc[] hits, Searcher searcher) throws IOException {
+ System.out.println(hits.length + " total results\n");
+ for (int i = 0 ; i < hits.length; i++) {
if ( i < 10 || (i > 94 && i < 105) ) {
- Document d = hits.doc(i);
+ Document d = searcher.doc(hits[i].doc);
System.out.println(i + " " + d.get(ID_FIELD));
}
}
Modified: lucene/java/trunk/src/test/org/apache/lucene/TestDemo.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/TestDemo.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/TestDemo.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/TestDemo.java Fri May 23 11:57:55 2008
@@ -17,7 +17,8 @@
* limitations under the License.
*/
-import org.apache.lucene.util.LuceneTestCase;
+import java.io.IOException;
+
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
@@ -25,13 +26,12 @@
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
+import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
-
-import java.io.IOException;
+import org.apache.lucene.util.LuceneTestCase;
/**
* A very simple demo used in the API documentation (src/java/overview.html).
@@ -64,11 +64,11 @@
// Parse a simple query that searches for "text":
QueryParser parser = new QueryParser("fieldname", analyzer);
Query query = parser.parse("text");
- Hits hits = isearcher.search(query);
- assertEquals(1, hits.length());
+ ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;
+ assertEquals(1, hits.length);
// Iterate through the results:
- for (int i = 0; i < hits.length(); i++) {
- Document hitDoc = hits.doc(i);
+ for (int i = 0; i < hits.length; i++) {
+ Document hitDoc = isearcher.doc(hits[i].doc);
assertEquals("This is the text to be indexed.", hitDoc.get("fieldname"));
}
isearcher.close();
Modified: lucene/java/trunk/src/test/org/apache/lucene/TestHitIterator.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/TestHitIterator.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/TestHitIterator.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/TestHitIterator.java Fri May 23 11:57:55 2008
@@ -35,6 +35,8 @@
/**
* This test intentionally not put in the search package in order
* to test HitIterator and Hit package protection.
+ *
+ * @deprecated Hits will be removed in Lucene 3.0
*/
public class TestHitIterator extends LuceneTestCase {
public void testIterator() throws Exception {
Modified: lucene/java/trunk/src/test/org/apache/lucene/TestSearch.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/TestSearch.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/TestSearch.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/TestSearch.java Fri May 23 11:57:55 2008
@@ -108,7 +108,7 @@
"\"a c\"",
"\"a c e\"",
};
- Hits hits = null;
+ ScoreDoc[] hits = null;
QueryParser parser = new QueryParser("contents", analyzer);
parser.setPhraseSlop(4);
@@ -121,12 +121,12 @@
//DateFilter filter = DateFilter.Before("modified", Time(1997,00,01));
//System.out.println(filter);
- hits = searcher.search(query);
+ hits = searcher.search(query, null, 1000).scoreDocs;
- out.println(hits.length() + " total results");
- for (int i = 0 ; i < hits.length() && i < 10; i++) {
- Document d = hits.doc(i);
- out.println(i + " " + hits.score(i)
+ out.println(hits.length + " total results");
+ for (int i = 0 ; i < hits.length && i < 10; i++) {
+ Document d = searcher.doc(hits[i].doc);
+ out.println(i + " " + hits[i].score
// + " " + DateField.stringToDate(d.get("modified"))
+ " " + d.get("contents"));
}
Modified: lucene/java/trunk/src/test/org/apache/lucene/TestSearchForDuplicates.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/TestSearchForDuplicates.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/TestSearchForDuplicates.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/TestSearchForDuplicates.java Fri May 23 11:57:55 2008
@@ -101,16 +101,15 @@
// try a search without OR
Searcher searcher = new IndexSearcher(directory);
- Hits hits = null;
QueryParser parser = new QueryParser(PRIORITY_FIELD, analyzer);
Query query = parser.parse(HIGH_PRIORITY);
out.println("Query: " + query.toString(PRIORITY_FIELD));
- hits = searcher.search(query);
- printHits(out, hits);
- checkHits(hits, MAX_DOCS);
+ ScoreDoc[] hits = searcher.search(query, null, MAX_DOCS).scoreDocs;
+ printHits(out, hits, searcher);
+ checkHits(hits, MAX_DOCS, searcher);
searcher.close();
@@ -123,29 +122,29 @@
query = parser.parse(HIGH_PRIORITY + " OR " + MED_PRIORITY);
out.println("Query: " + query.toString(PRIORITY_FIELD));
- hits = searcher.search(query);
- printHits(out, hits);
- checkHits(hits, MAX_DOCS);
+ hits = searcher.search(query, null, MAX_DOCS).scoreDocs;
+ printHits(out, hits, searcher);
+ checkHits(hits, MAX_DOCS, searcher);
searcher.close();
}
- private void printHits(PrintWriter out, Hits hits ) throws IOException {
- out.println(hits.length() + " total results\n");
- for (int i = 0 ; i < hits.length(); i++) {
+ private void printHits(PrintWriter out, ScoreDoc[] hits, Searcher searcher ) throws IOException {
+ out.println(hits.length + " total results\n");
+ for (int i = 0 ; i < hits.length; i++) {
if ( i < 10 || (i > 94 && i < 105) ) {
- Document d = hits.doc(i);
+ Document d = searcher.doc(hits[i].doc);
out.println(i + " " + d.get(ID_FIELD));
}
}
}
- private void checkHits(Hits hits, int expectedCount) throws IOException {
- assertEquals("total results", expectedCount, hits.length());
- for (int i = 0 ; i < hits.length(); i++) {
+ private void checkHits(ScoreDoc[] hits, int expectedCount, Searcher searcher) throws IOException {
+ assertEquals("total results", expectedCount, hits.length);
+ for (int i = 0 ; i < hits.length; i++) {
if ( i < 10 || (i > 94 && i < 105) ) {
- Document d = hits.doc(i);
+ Document d = searcher.doc(hits[i].doc);
assertEquals("check " + i, String.valueOf(i), d.get(ID_FIELD));
}
}
Modified: lucene/java/trunk/src/test/org/apache/lucene/ThreadSafetyTest.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/ThreadSafetyTest.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/ThreadSafetyTest.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/ThreadSafetyTest.java Fri May 23 11:57:55 2008
@@ -115,11 +115,11 @@
throws Exception {
System.out.println("Searching for " + n);
QueryParser parser = new QueryParser("contents", ANALYZER);
- Hits hits =
- searcher.search(parser.parse(English.intToEnglish(n)));
- System.out.println("Search for " + n + ": total=" + hits.length());
- for (int j = 0; j < Math.min(3, hits.length()); j++) {
- System.out.println("Hit for " + n + ": " + hits.doc(j).get("id"));
+ ScoreDoc[] hits =
+ searcher.search(parser.parse(English.intToEnglish(n)), null, 1000).scoreDocs;
+ System.out.println("Search for " + n + ": total=" + hits.length);
+ for (int j = 0; j < Math.min(3, hits.length); j++) {
+ System.out.println("Hit for " + n + ": " + searcher.doc(hits[j].doc).get("id"));
}
}
}
Modified: lucene/java/trunk/src/test/org/apache/lucene/analysis/TestKeywordAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/analysis/TestKeywordAnalyzer.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/analysis/TestKeywordAnalyzer.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/analysis/TestKeywordAnalyzer.java Fri May 23 11:57:55 2008
@@ -17,18 +17,18 @@
* limitations under the License.
*/
-import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermDocs;
-import org.apache.lucene.store.RAMDirectory;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
+import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
-import org.apache.lucene.search.Hits;
-import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.util.LuceneTestCase;
public class TestKeywordAnalyzer extends LuceneTestCase {
@@ -59,10 +59,10 @@
QueryParser queryParser = new QueryParser("description", analyzer);
Query query = queryParser.parse("partnum:Q36 AND SPACE");
- Hits hits = searcher.search(query);
+ ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
assertEquals("Q36 kept as-is",
"+partnum:Q36 +space", query.toString("description"));
- assertEquals("doc found!", 1, hits.length());
+ assertEquals("doc found!", 1, hits.length);
}
public void testMutipleDocument() throws Exception {
Modified: lucene/java/trunk/src/test/org/apache/lucene/document/TestDocument.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/document/TestDocument.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/document/TestDocument.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/document/TestDocument.java Fri May 23 11:57:55 2008
@@ -1,18 +1,15 @@
package org.apache.lucene.document;
-import org.apache.lucene.util.LuceneTestCase;
-
-import org.apache.lucene.store.RAMDirectory;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Searcher;
-import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.util.LuceneTestCase;
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -170,10 +167,10 @@
Query query = new TermQuery(new Term("keyword", "test1"));
// ensure that queries return expected results without DateFilter first
- Hits hits = searcher.search(query);
- assertEquals(1, hits.length());
+ ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
+ assertEquals(1, hits.length);
- doAssert(hits.doc(0), true);
+ doAssert(searcher.doc(hits[0].doc), true);
searcher.close();
}
@@ -244,11 +241,11 @@
Query query = new TermQuery(new Term("keyword", "test"));
// ensure that queries return expected results without DateFilter first
- Hits hits = searcher.search(query);
- assertEquals(3, hits.length());
+ ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
+ assertEquals(3, hits.length);
int result = 0;
for(int i=0;i<3;i++) {
- Document doc2 = hits.doc(i);
+ Document doc2 = searcher.doc(hits[i].doc);
Field f = doc2.getField("id");
if (f.stringValue().equals("id1"))
result |= 1;
Modified: lucene/java/trunk/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java Fri May 23 11:57:55 2008
@@ -17,29 +17,27 @@
* limitations under the License.
*/
-import org.apache.lucene.util.LuceneTestCase;
-
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.util.Arrays;
-import java.util.List;
import java.util.Enumeration;
-import java.util.zip.ZipFile;
+import java.util.List;
import java.util.zip.ZipEntry;
-
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.FileOutputStream;
-import java.io.BufferedOutputStream;
-import java.io.IOException;
-import java.io.File;
+import java.util.zip.ZipFile;
import org.apache.lucene.analysis.WhitespaceAnalyzer;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.search.Hits;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
+import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util._TestUtil;
/*
@@ -180,12 +178,12 @@
}
}
- private void testHits(Hits hits, int expectedCount, IndexReader reader) throws IOException {
- final int hitCount = hits.length();
+ private void testHits(ScoreDoc[] hits, int expectedCount, IndexReader reader) throws IOException {
+ final int hitCount = hits.length;
assertEquals("wrong number of hits", expectedCount, hitCount);
for(int i=0;i<hitCount;i++) {
- hits.doc(i);
- reader.getTermFreqVectors(hits.id(i));
+ reader.document(hits[i].doc);
+ reader.getTermFreqVectors(hits[i].doc);
}
}
@@ -224,11 +222,11 @@
assertEquals(7, i);
}
- Hits hits = searcher.search(new TermQuery(new Term("content", "aaa")));
+ ScoreDoc[] hits = searcher.search(new TermQuery(new Term("content", "aaa")), null, 1000).scoreDocs;
// First document should be #21 since it's norm was
// increased:
- Document d = hits.doc(0);
+ Document d = searcher.doc(hits[0].doc);
assertEquals("didn't get the right document first", "21", d.get("id"));
testHits(hits, 34, searcher.getIndexReader());
@@ -238,12 +236,12 @@
!oldName.startsWith("21.") &&
!oldName.startsWith("22.")) {
// Test on indices >= 2.3
- hits = searcher.search(new TermQuery(new Term("utf8", "\u0000")));
- assertEquals(34, hits.length());
- hits = searcher.search(new TermQuery(new Term("utf8", "Lu\uD834\uDD1Ece\uD834\uDD60ne")));
- assertEquals(34, hits.length());
- hits = searcher.search(new TermQuery(new Term("utf8", "ab\ud917\udc17cd")));
- assertEquals(34, hits.length());
+ hits = searcher.search(new TermQuery(new Term("utf8", "\u0000")), null, 1000).scoreDocs;
+ assertEquals(34, hits.length);
+ hits = searcher.search(new TermQuery(new Term("utf8", "Lu\uD834\uDD1Ece\uD834\uDD60ne")), null, 1000).scoreDocs;
+ assertEquals(34, hits.length);
+ hits = searcher.search(new TermQuery(new Term("utf8", "ab\ud917\udc17cd")), null, 1000).scoreDocs;
+ assertEquals(34, hits.length);
}
searcher.close();
@@ -272,8 +270,8 @@
// make sure searching sees right # hits
IndexSearcher searcher = new IndexSearcher(dir);
- Hits hits = searcher.search(new TermQuery(new Term("content", "aaa")));
- Document d = hits.doc(0);
+ ScoreDoc[] hits = searcher.search(new TermQuery(new Term("content", "aaa")), null, 1000).scoreDocs;
+ Document d = searcher.doc(hits[0].doc);
assertEquals("wrong first document", "21", d.get("id"));
testHits(hits, 44, searcher.getIndexReader());
searcher.close();
@@ -289,9 +287,9 @@
// make sure they "took":
searcher = new IndexSearcher(dir);
- hits = searcher.search(new TermQuery(new Term("content", "aaa")));
- assertEquals("wrong number of hits", 43, hits.length());
- d = hits.doc(0);
+ hits = searcher.search(new TermQuery(new Term("content", "aaa")), null, 1000).scoreDocs;
+ assertEquals("wrong number of hits", 43, hits.length);
+ d = searcher.doc(hits[0].doc);
assertEquals("wrong first document", "22", d.get("id"));
testHits(hits, 43, searcher.getIndexReader());
searcher.close();
@@ -302,9 +300,9 @@
writer.close();
searcher = new IndexSearcher(dir);
- hits = searcher.search(new TermQuery(new Term("content", "aaa")));
- assertEquals("wrong number of hits", 43, hits.length());
- d = hits.doc(0);
+ hits = searcher.search(new TermQuery(new Term("content", "aaa")), null, 1000).scoreDocs;
+ assertEquals("wrong number of hits", 43, hits.length);
+ d = searcher.doc(hits[0].doc);
testHits(hits, 43, searcher.getIndexReader());
assertEquals("wrong first document", "22", d.get("id"));
searcher.close();
@@ -322,9 +320,9 @@
// make sure searching sees right # hits
IndexSearcher searcher = new IndexSearcher(dir);
- Hits hits = searcher.search(new TermQuery(new Term("content", "aaa")));
- assertEquals("wrong number of hits", 34, hits.length());
- Document d = hits.doc(0);
+ ScoreDoc[] hits = searcher.search(new TermQuery(new Term("content", "aaa")), null, 1000).scoreDocs;
+ assertEquals("wrong number of hits", 34, hits.length);
+ Document d = searcher.doc(hits[0].doc);
assertEquals("wrong first document", "21", d.get("id"));
searcher.close();
@@ -339,9 +337,9 @@
// make sure they "took":
searcher = new IndexSearcher(dir);
- hits = searcher.search(new TermQuery(new Term("content", "aaa")));
- assertEquals("wrong number of hits", 33, hits.length());
- d = hits.doc(0);
+ hits = searcher.search(new TermQuery(new Term("content", "aaa")), null, 1000).scoreDocs;
+ assertEquals("wrong number of hits", 33, hits.length);
+ d = searcher.doc(hits[0].doc);
assertEquals("wrong first document", "22", d.get("id"));
testHits(hits, 33, searcher.getIndexReader());
searcher.close();
@@ -352,9 +350,9 @@
writer.close();
searcher = new IndexSearcher(dir);
- hits = searcher.search(new TermQuery(new Term("content", "aaa")));
- assertEquals("wrong number of hits", 33, hits.length());
- d = hits.doc(0);
+ hits = searcher.search(new TermQuery(new Term("content", "aaa")), null, 1000).scoreDocs;
+ assertEquals("wrong number of hits", 33, hits.length);
+ d = searcher.doc(hits[0].doc);
assertEquals("wrong first document", "22", d.get("id"));
testHits(hits, 33, searcher.getIndexReader());
searcher.close();
Modified: lucene/java/trunk/src/test/org/apache/lucene/index/TestDeletionPolicy.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/index/TestDeletionPolicy.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/index/TestDeletionPolicy.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/index/TestDeletionPolicy.java Fri May 23 11:57:55 2008
@@ -17,23 +17,22 @@
* limitations under the License.
*/
-import org.apache.lucene.util.LuceneTestCase;
-
import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
import org.apache.lucene.analysis.WhitespaceAnalyzer;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.RAMDirectory;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.search.Hits;
-import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
-import java.util.List;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.HashSet;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.util.LuceneTestCase;
/*
Verify we can read the pre-2.1 file format, do searches
@@ -440,8 +439,8 @@
reader.deleteDocument(3*i+1);
reader.setNorm(4*i+1, "content", 2.0F);
IndexSearcher searcher = new IndexSearcher(reader);
- Hits hits = searcher.search(query);
- assertEquals(16*(1+i), hits.length());
+ ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
+ assertEquals(16*(1+i), hits.length);
// this is a commit when autoCommit=false:
reader.close();
searcher.close();
@@ -457,8 +456,8 @@
assertEquals(2*(N+2)-1, policy.numOnCommit);
IndexSearcher searcher = new IndexSearcher(dir);
- Hits hits = searcher.search(query);
- assertEquals(176, hits.length());
+ ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
+ assertEquals(176, hits.length);
// Simplistic check: just verify only the past N segments_N's still
// exist, and, I can open a reader on each:
@@ -476,7 +475,7 @@
// autoCommit false case:
if (!autoCommit) {
searcher = new IndexSearcher(reader);
- hits = searcher.search(query);
+ hits = searcher.search(query, null, 1000).scoreDocs;
if (i > 1) {
if (i % 2 == 0) {
expectedCount += 1;
@@ -484,7 +483,7 @@
expectedCount -= 17;
}
}
- assertEquals(expectedCount, hits.length());
+ assertEquals(expectedCount, hits.length);
searcher.close();
}
reader.close();
@@ -543,8 +542,8 @@
reader.deleteDocument(3);
reader.setNorm(5, "content", 2.0F);
IndexSearcher searcher = new IndexSearcher(reader);
- Hits hits = searcher.search(query);
- assertEquals(16, hits.length());
+ ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
+ assertEquals(16, hits.length);
// this is a commit when autoCommit=false:
reader.close();
searcher.close();
@@ -560,8 +559,8 @@
assertEquals(2*(N+1), policy.numOnCommit);
IndexSearcher searcher = new IndexSearcher(dir);
- Hits hits = searcher.search(query);
- assertEquals(0, hits.length());
+ ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
+ assertEquals(0, hits.length);
// Simplistic check: just verify only the past N segments_N's still
// exist, and, I can open a reader on each:
@@ -579,8 +578,8 @@
// autoCommit false case:
if (!autoCommit) {
searcher = new IndexSearcher(reader);
- hits = searcher.search(query);
- assertEquals(expectedCount, hits.length());
+ hits = searcher.search(query, null, 1000).scoreDocs;
+ assertEquals(expectedCount, hits.length);
searcher.close();
if (expectedCount == 0) {
expectedCount = 16;
Modified: lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReader.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReader.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReader.java Fri May 23 11:57:55 2008
@@ -18,25 +18,35 @@
*/
-import org.apache.lucene.util.LuceneTestCase;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
import junit.framework.TestSuite;
import junit.textui.TestRunner;
+
import org.apache.lucene.analysis.WhitespaceAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader.FieldOption;
-import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.store.*;
+import org.apache.lucene.store.AlreadyClosedException;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.store.LockObtainFailedException;
+import org.apache.lucene.store.MockRAMDirectory;
+import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util._TestUtil;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.*;
-
public class TestIndexReader extends LuceneTestCase
{
/** Main for running test case by itself. */
@@ -910,14 +920,14 @@
*/
IndexSearcher searcher = new IndexSearcher(newReader);
- Hits hits = null;
+ ScoreDoc[] hits = null;
try {
- hits = searcher.search(new TermQuery(searchTerm));
+ hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
} catch (IOException e) {
e.printStackTrace();
fail(testName + ": exception when searching: " + e);
}
- int result2 = hits.length();
+ int result2 = hits.length;
if (success) {
if (result2 != END_COUNT) {
fail(testName + ": method did not throw exception but hits.length for search on term 'aaa' is " + result2 + " instead of expected " + END_COUNT);
Modified: lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReaderReopen.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReaderReopen.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReaderReopen.java Fri May 23 11:57:55 2008
@@ -27,6 +27,8 @@
import java.util.Random;
import java.util.Set;
+import junit.framework.TestCase;
+
import org.apache.lucene.analysis.KeywordAnalyzer;
import org.apache.lucene.analysis.WhitespaceAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
@@ -35,16 +37,14 @@
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
-import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.LuceneTestCase;
-import junit.framework.TestCase;
-
public class TestIndexReaderReopen extends LuceneTestCase {
private File indexDir;
@@ -687,9 +687,11 @@
IndexSearcher searcher = new IndexSearcher(refreshed);
- Hits hits = searcher.search(new TermQuery(new Term("field1", "a" + rnd.nextInt(refreshed.maxDoc()))));
- if (hits.length() > 0) {
- hits.doc(0);
+ ScoreDoc[] hits = searcher.search(
+ new TermQuery(new Term("field1", "a" + rnd.nextInt(refreshed.maxDoc()))),
+ null, 1000).scoreDocs;
+ if (hits.length > 0) {
+ searcher.doc(hits[0].doc);
}
// r might have changed because this is not a
Modified: lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriter.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriter.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriter.java Fri May 23 11:57:55 2008
@@ -39,7 +39,7 @@
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.spans.SpanTermQuery;
@@ -188,8 +188,8 @@
assertEquals("first docFreq", 57, reader.docFreq(searchTerm));
IndexSearcher searcher = new IndexSearcher(reader);
- Hits hits = searcher.search(new TermQuery(searchTerm));
- assertEquals("first number of hits", 57, hits.length());
+ ScoreDoc[] hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals("first number of hits", 57, hits.length);
searcher.close();
reader.close();
@@ -392,12 +392,12 @@
searcher = new IndexSearcher(reader);
try {
- hits = searcher.search(new TermQuery(searchTerm));
+ hits = searcher.search(new TermQuery(searchTerm), null, END_COUNT).scoreDocs;
} catch (IOException e) {
e.printStackTrace(System.out);
fail(testName + ": exception when searching: " + e);
}
- int result2 = hits.length();
+ int result2 = hits.length;
if (success) {
if (result2 != result) {
fail(testName + ": method did not throw exception but hits.length for search on term 'aaa' is " + result2 + " instead of expected " + result);
@@ -1016,8 +1016,8 @@
Term searchTerm = new Term("content", "aaa");
IndexSearcher searcher = new IndexSearcher(dir);
- Hits hits = searcher.search(new TermQuery(searchTerm));
- assertEquals("first number of hits", 14, hits.length());
+ ScoreDoc[] hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals("first number of hits", 14, hits.length);
searcher.close();
IndexReader reader = IndexReader.open(dir);
@@ -1028,8 +1028,8 @@
addDoc(writer);
}
searcher = new IndexSearcher(dir);
- hits = searcher.search(new TermQuery(searchTerm));
- assertEquals("reader incorrectly sees changes from writer with autoCommit disabled", 14, hits.length());
+ hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals("reader incorrectly sees changes from writer with autoCommit disabled", 14, hits.length);
searcher.close();
assertTrue("reader should have still been current", reader.isCurrent());
}
@@ -1039,8 +1039,8 @@
assertFalse("reader should not be current now", reader.isCurrent());
searcher = new IndexSearcher(dir);
- hits = searcher.search(new TermQuery(searchTerm));
- assertEquals("reader did not see changes after writer was closed", 47, hits.length());
+ hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals("reader did not see changes after writer was closed", 47, hits.length);
searcher.close();
}
@@ -1064,8 +1064,8 @@
Term searchTerm = new Term("content", "aaa");
IndexSearcher searcher = new IndexSearcher(dir);
- Hits hits = searcher.search(new TermQuery(searchTerm));
- assertEquals("first number of hits", 14, hits.length());
+ ScoreDoc[] hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals("first number of hits", 14, hits.length);
searcher.close();
writer = new IndexWriter(dir, false, new WhitespaceAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED);
@@ -1077,8 +1077,8 @@
writer.deleteDocuments(searchTerm);
searcher = new IndexSearcher(dir);
- hits = searcher.search(new TermQuery(searchTerm));
- assertEquals("reader incorrectly sees changes from writer with autoCommit disabled", 14, hits.length());
+ hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals("reader incorrectly sees changes from writer with autoCommit disabled", 14, hits.length);
searcher.close();
// Now, close the writer:
@@ -1087,8 +1087,8 @@
assertNoUnreferencedFiles(dir, "unreferenced files remain after abort()");
searcher = new IndexSearcher(dir);
- hits = searcher.search(new TermQuery(searchTerm));
- assertEquals("saw changes after writer.abort", 14, hits.length());
+ hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals("saw changes after writer.abort", 14, hits.length);
searcher.close();
// Now make sure we can re-open the index, add docs,
@@ -1105,15 +1105,15 @@
addDoc(writer);
}
searcher = new IndexSearcher(dir);
- hits = searcher.search(new TermQuery(searchTerm));
- assertEquals("reader incorrectly sees changes from writer with autoCommit disabled", 14, hits.length());
+ hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals("reader incorrectly sees changes from writer with autoCommit disabled", 14, hits.length);
searcher.close();
}
writer.close();
searcher = new IndexSearcher(dir);
- hits = searcher.search(new TermQuery(searchTerm));
- assertEquals("didn't see changes after close", 218, hits.length());
+ hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals("didn't see changes after close", 218, hits.length);
searcher.close();
dir.close();
@@ -1437,8 +1437,8 @@
writer.close();
IndexSearcher searcher = new IndexSearcher(dir);
- Hits hits = searcher.search(new TermQuery(new Term("field", "aaa")));
- assertEquals(300, hits.length());
+ ScoreDoc[] hits = searcher.search(new TermQuery(new Term("field", "aaa")), null, 1000).scoreDocs;
+ assertEquals(300, hits.length);
searcher.close();
dir.close();
@@ -1463,8 +1463,8 @@
Term searchTerm = new Term("field", "aaa");
IndexSearcher searcher = new IndexSearcher(dir);
- Hits hits = searcher.search(new TermQuery(searchTerm));
- assertEquals(10, hits.length());
+ ScoreDoc[] hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals(10, hits.length);
searcher.close();
writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
@@ -1481,8 +1481,8 @@
}
writer.close();
searcher = new IndexSearcher(dir);
- hits = searcher.search(new TermQuery(searchTerm));
- assertEquals(27, hits.length());
+ hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals(27, hits.length);
searcher.close();
IndexReader reader = IndexReader.open(dir);
@@ -1546,8 +1546,8 @@
writer.close();
Term searchTerm = new Term("content", "aaa");
IndexSearcher searcher = new IndexSearcher(dir);
- Hits hits = searcher.search(new TermQuery(searchTerm));
- assertEquals("did not get right number of hits", 100, hits.length());
+ ScoreDoc[] hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
+ assertEquals("did not get right number of hits", 100, hits.length);
writer.close();
writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
@@ -3587,12 +3587,12 @@
pq.add(new Term("field", "a"));
pq.add(new Term("field", "b"));
pq.add(new Term("field", "c"));
- Hits hits = s.search(pq);
- assertEquals(1, hits.length());
+ ScoreDoc[] hits = s.search(pq, null, 1000).scoreDocs;
+ assertEquals(1, hits.length);
Query q = new SpanTermQuery(new Term("field", "a"));
- hits = s.search(q);
- assertEquals(1, hits.length());
+ hits = s.search(q, null, 1000).scoreDocs;
+ assertEquals(1, hits.length);
TermPositions tps = s.getIndexReader().termPositions(new Term("field", "a"));
assertTrue(tps.next());
assertEquals(1, tps.freq());
Modified: lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriterDelete.java?rev=659626&r1=659625&r2=659626&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriterDelete.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriterDelete.java Fri May 23 11:57:55 2008
@@ -20,16 +20,15 @@
import java.io.IOException;
import java.util.Arrays;
-import org.apache.lucene.util.LuceneTestCase;
-
import org.apache.lucene.analysis.WhitespaceAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
-import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.MockRAMDirectory;
+import org.apache.lucene.util.LuceneTestCase;
public class TestIndexWriterDelete extends LuceneTestCase {
@@ -278,7 +277,7 @@
private int getHitCount(Directory dir, Term term) throws IOException {
IndexSearcher searcher = new IndexSearcher(dir);
- int hitCount = searcher.search(new TermQuery(term)).length();
+ int hitCount = searcher.search(new TermQuery(term), null, 1000).totalHits;
searcher.close();
return hitCount;
}
@@ -434,15 +433,15 @@
}
IndexSearcher searcher = new IndexSearcher(newReader);
- Hits hits = null;
+ ScoreDoc[] hits = null;
try {
- hits = searcher.search(new TermQuery(searchTerm));
+ hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
}
catch (IOException e) {
e.printStackTrace();
fail(testName + ": exception when searching: " + e);
}
- int result2 = hits.length();
+ int result2 = hits.length;
if (success) {
if (x == 0 && result2 != END_COUNT) {
fail(testName