@@ -539,7 +539,7 @@ protected virtual TopDocs Search(Weight weight, ScoreDoc? after, int nDocs, Canc
539
539
540
540
for ( int i = 0 ; i < m_leafSlices . Length ; i ++ ) // search each sub
541
541
{
542
- runner . Submit ( new SearcherCallableNoSort ( @lock , this , m_leafSlices [ i ] , weight , after , nDocs , hq ) . Call ) ;
542
+ runner . Submit ( new SearcherCallableNoSort ( @lock , this , m_leafSlices [ i ] , weight , after , nDocs , hq , cancellationToken ) . Call ) ;
543
543
}
544
544
545
545
int totalHits = 0 ;
@@ -649,7 +649,7 @@ protected virtual TopFieldDocs Search(Weight weight, FieldDoc? after, int nDocs,
649
649
650
650
for ( int i = 0 ; i < m_leafSlices . Length ; i ++ ) // search each leaf slice
651
651
{
652
- runner . Submit ( new SearcherCallableWithSort ( @lock , this , m_leafSlices [ i ] , weight , after , nDocs , topCollector , sort , doDocScores , doMaxScore ) . Call ) ;
652
+ runner . Submit ( new SearcherCallableWithSort ( @lock , this , m_leafSlices [ i ] , weight , after , nDocs , topCollector , sort , doDocScores , doMaxScore , cancellationToken ) . Call ) ;
653
653
}
654
654
655
655
int totalHits = 0 ;
@@ -756,6 +756,8 @@ protected virtual void Search(IList<AtomicReaderContext> leaves, Weight weight,
756
756
}
757
757
}
758
758
}
759
+
760
+ cancellationToken . ThrowIfCancellationRequested ( ) ; // LUCENENET specific - cancellation support
759
761
}
760
762
761
763
/// <summary>
@@ -859,21 +861,23 @@ public virtual Weight CreateNormalizedWeight(Query query)
859
861
private readonly int nDocs ;
860
862
private readonly HitQueue hq ;
861
863
private readonly LeafSlice slice ;
864
+ private readonly CancellationToken cancellationToken ;
862
865
863
- public SearcherCallableNoSort ( ReentrantLock @lock , IndexSearcher searcher , LeafSlice slice , Weight weight , ScoreDoc ? after , int nDocs , HitQueue hq )
866
+ public SearcherCallableNoSort ( ReentrantLock @lock , IndexSearcher searcher , LeafSlice slice , Weight weight , ScoreDoc ? after , int nDocs , HitQueue hq , CancellationToken cancellationToken )
864
867
{
865
868
this . @lock = @lock ;
866
869
this . searcher = searcher ;
867
870
this . weight = weight ;
868
871
this . after = after ;
869
872
this . nDocs = nDocs ;
870
873
this . hq = hq ;
874
+ this . cancellationToken = cancellationToken ;
871
875
this . slice = slice ;
872
876
}
873
877
874
878
public TopDocs Call ( )
875
879
{
876
- TopDocs docs = searcher . Search ( slice . Leaves , weight , after , nDocs ) ;
880
+ TopDocs docs = searcher . Search ( slice . Leaves , weight , after , nDocs , cancellationToken ) ;
877
881
ScoreDoc [ ] scoreDocs = docs . ScoreDocs ;
878
882
//it would be so nice if we had a thread-safe insert
879
883
@lock . Lock ( ) ;
@@ -911,8 +915,9 @@ public TopDocs Call()
911
915
private readonly FieldDoc ? after ;
912
916
private readonly bool doDocScores ;
913
917
private readonly bool doMaxScore ;
918
+ private readonly CancellationToken cancellationToken ;
914
919
915
- public SearcherCallableWithSort ( ReentrantLock @lock , IndexSearcher searcher , LeafSlice slice , Weight weight , FieldDoc ? after , int nDocs , TopFieldCollector hq , Sort sort , bool doDocScores , bool doMaxScore )
920
+ public SearcherCallableWithSort ( ReentrantLock @lock , IndexSearcher searcher , LeafSlice slice , Weight weight , FieldDoc ? after , int nDocs , TopFieldCollector hq , Sort sort , bool doDocScores , bool doMaxScore , CancellationToken cancellationToken )
916
921
{
917
922
this . @lock = @lock ;
918
923
this . searcher = searcher ;
@@ -924,14 +929,15 @@ public SearcherCallableWithSort(ReentrantLock @lock, IndexSearcher searcher, Lea
924
929
this . after = after ;
925
930
this . doDocScores = doDocScores ;
926
931
this . doMaxScore = doMaxScore ;
932
+ this . cancellationToken = cancellationToken ;
927
933
}
928
934
929
935
private readonly FakeScorer fakeScorer = new FakeScorer ( ) ;
930
936
931
937
public TopFieldDocs Call ( )
932
938
{
933
939
if ( Debugging . AssertsEnabled ) Debugging . Assert ( slice . Leaves . Length == 1 ) ;
934
- TopFieldDocs docs = searcher . Search ( slice . Leaves , weight , after , nDocs , sort , true , doDocScores || sort . NeedsScores , doMaxScore ) ;
940
+ TopFieldDocs docs = searcher . Search ( slice . Leaves , weight , after , nDocs , sort , true , doDocScores || sort . NeedsScores , doMaxScore , cancellationToken ) ;
935
941
@lock . Lock ( ) ;
936
942
try
937
943
{
@@ -991,7 +997,7 @@ public void Dispose()
991
997
992
998
public void Submit ( Func < T > task )
993
999
{
994
- this . service . Submit ( task ) ;
1000
+ this . service . Submit ( task , cancellationToken ) ;
995
1001
++ numTasks ;
996
1002
}
997
1003
0 commit comments