Skip to content

Commit 489590f

Browse files
committed
PR feedback
1 parent 2d44c5a commit 489590f

5 files changed

Lines changed: 31 additions & 11 deletions

File tree

src/Lucene.Net.Grouping/package.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,4 +166,4 @@ int maxDoc = s.MaxDoc;
166166
FixedBitSet groupHeadsBitSet = c.RetrieveGroupHeads(maxDoc);
167167
```
168168

169-
For each of the above collector types there is also a variant that works with `ValueSource` instead of of fields. Concretely this means that these variants can work with functions. These variants are slower than there term based counter parts. These implementations are located in the `Lucene.Net.Search.Grouping.Function` package, but can also be used with the `GroupingSearch` convenience utility
169+
For each of the above collector types there is also a variant that works with `ValueSource` instead of of fields. Concretely this means that these variants can work with functions. These variants are slower than there term based counter parts. These implementations are located in the `Lucene.Net.Search.Grouping.Function` package, but can also be used with the `GroupingSearch` convenience utility

src/Lucene.Net.TestFramework/Search/ShardSearchingTestBase.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ internal virtual void BroadcastNodeReopen(int nodeID, long version, IndexSearche
193193
// MOCK: in a real env you have to hit the wire
194194
// (send this query to all remote nodes
195195
// concurrently):
196-
internal virtual TopDocs SearchNode(int nodeID, long[] nodeVersions, Query q, Sort sort, int numHits, ScoreDoc searchAfter)
196+
internal virtual TopDocs SearchNode(int nodeID, long[] nodeVersions, Query q, Sort sort, int numHits, ScoreDoc searchAfter, CancellationToken cancellationToken = default)
197197
{
198198
NodeState.ShardIndexSearcher s = m_nodes[nodeID].Acquire(nodeVersions);
199199
try
@@ -202,17 +202,17 @@ internal virtual TopDocs SearchNode(int nodeID, long[] nodeVersions, Query q, So
202202
{
203203
if (searchAfter != null)
204204
{
205-
return s.LocalSearchAfter(searchAfter, q, numHits);
205+
return s.LocalSearchAfter(searchAfter, q, numHits, cancellationToken);
206206
}
207207
else
208208
{
209-
return s.LocalSearch(q, numHits);
209+
return s.LocalSearch(q, numHits, cancellationToken);
210210
}
211211
}
212212
else
213213
{
214214
if (Debugging.AssertsEnabled) Debugging.Assert(searchAfter is null); // not supported yet
215-
return s.LocalSearch(q, numHits, sort);
215+
return s.LocalSearch(q, numHits, sort, cancellationToken);
216216
}
217217
}
218218
finally
@@ -554,7 +554,7 @@ public override TopFieldDocs Search(Query query, int numHits, Sort sort, Cancell
554554
}
555555
else
556556
{
557-
shardHits[nodeID] = outerInstance.outerInstance.SearchNode(nodeID, nodeVersions, query, sort, numHits, null);
557+
shardHits[nodeID] = outerInstance.outerInstance.SearchNode(nodeID, nodeVersions, query, sort, numHits, null, cancellationToken);
558558
}
559559
}
560560

src/Lucene.Net/Search/IndexSearcher.cs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,11 @@ namespace Lucene.Net.Search
7676
/// <see cref="TaskScheduler"/> passed to the constructor will be used to execute the search operations
7777
/// and the <see cref="CancellationToken"/> will be passed to the awaited tasks. If the <see cref="TaskScheduler"/>
7878
/// is <c>null</c>, the search operations will be executed synchronously, and the <see cref="CancellationToken"/>
79-
/// will throw if cancellation is requested upon entry to each leaf reader.
79+
/// will throw an <see cref="OperationCanceledException"/> if cancellation is requested upon entry to each leaf
80+
/// reader. Each task in the multithreaded case acts as if it were a single-threaded search, and will do the same.
81+
/// <para />
82+
/// In both cases, this is a "best effort" attempt at cancellation, and some work may continue to proceed
83+
/// after the cancellation has been requested.
8084
/// </remarks>
8185
public class IndexSearcher
8286
{
@@ -289,6 +293,7 @@ protected virtual Query WrapFilter(Query query, Filter? filter)
289293
/// <exception cref="BooleanQuery.TooManyClausesException"> If a query would exceed
290294
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
291295
/// <exception cref="ArgumentNullException"><paramref name="query"/> is <c>null</c>.</exception>
296+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
292297
public virtual TopDocs SearchAfter(ScoreDoc? after, Query query, int n, CancellationToken cancellationToken = default)
293298
{
294299
return Search(CreateNormalizedWeight(query), after, n, cancellationToken);
@@ -306,6 +311,7 @@ public virtual TopDocs SearchAfter(ScoreDoc? after, Query query, int n, Cancella
306311
/// <exception cref="BooleanQuery.TooManyClausesException"> If a query would exceed
307312
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
308313
/// <exception cref="ArgumentNullException"><paramref name="query"/> is <c>null</c>.</exception>
314+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
309315
public virtual TopDocs SearchAfter(ScoreDoc? after, Query query, Filter? filter, int n, CancellationToken cancellationToken = default)
310316
{
311317
return Search(CreateNormalizedWeight(WrapFilter(query, filter)), after, n, cancellationToken);
@@ -318,6 +324,7 @@ public virtual TopDocs SearchAfter(ScoreDoc? after, Query query, Filter? filter,
318324
/// <exception cref="BooleanQuery.TooManyClausesException"> If a query would exceed
319325
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
320326
/// <exception cref="ArgumentNullException"><paramref name="query"/> is <c>null</c>.</exception>
327+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
321328
public virtual TopDocs Search(Query query, int n, CancellationToken cancellationToken = default)
322329
{
323330
return Search(query, filter: null, n, cancellationToken);
@@ -329,6 +336,7 @@ public virtual TopDocs Search(Query query, int n, CancellationToken cancellation
329336
/// </summary>
330337
/// <exception cref="BooleanQuery.TooManyClausesException"> If a query would exceed
331338
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
339+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
332340
public virtual TopDocs Search(Query query, Filter? filter, int n, CancellationToken cancellationToken = default)
333341
{
334342
return Search(CreateNormalizedWeight(WrapFilter(query, filter)), after: null, n, cancellationToken);
@@ -347,6 +355,7 @@ public virtual TopDocs Search(Query query, Filter? filter, int n, CancellationTo
347355
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
348356
/// <exception cref="ArgumentNullException"><paramref name="query"/> or
349357
/// <paramref name="results"/> is <c>null</c>.</exception>
358+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
350359
public virtual void Search(Query query, Filter? filter, ICollector results, CancellationToken cancellationToken = default)
351360
{
352361
Search(m_leafContexts, CreateNormalizedWeight(WrapFilter(query, filter)), results, cancellationToken);
@@ -361,6 +370,7 @@ public virtual void Search(Query query, Filter? filter, ICollector results, Canc
361370
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
362371
/// <exception cref="ArgumentNullException"><paramref name="query"/> or
363372
/// <paramref name="results"/> is <c>null</c>.</exception>
373+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
364374
public virtual void Search(Query query, ICollector results, CancellationToken cancellationToken = default)
365375
{
366376
Search(m_leafContexts, CreateNormalizedWeight(query), results, cancellationToken);
@@ -380,6 +390,7 @@ public virtual void Search(Query query, ICollector results, CancellationToken ca
380390
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
381391
/// <exception cref="ArgumentNullException"><paramref name="query"/> or
382392
/// <paramref name="sort"/> is <c>null</c>.</exception>
393+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
383394
public virtual TopFieldDocs Search(Query query, Filter? filter, int n, Sort sort, CancellationToken cancellationToken = default)
384395
{
385396
return Search(CreateNormalizedWeight(WrapFilter(query, filter)), n, sort, false, false, cancellationToken);
@@ -401,6 +412,7 @@ public virtual TopFieldDocs Search(Query query, Filter? filter, int n, Sort sort
401412
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
402413
/// <exception cref="ArgumentNullException"><paramref name="query"/> or
403414
/// <paramref name="sort"/> is <c>null</c>.</exception>
415+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
404416
public virtual TopFieldDocs Search(Query query, Filter? filter, int n, Sort sort, bool doDocScores, bool doMaxScore, CancellationToken cancellationToken = default)
405417
{
406418
return Search(CreateNormalizedWeight(WrapFilter(query, filter)), n, sort, doDocScores, doMaxScore, cancellationToken);
@@ -419,6 +431,7 @@ public virtual TopFieldDocs Search(Query query, Filter? filter, int n, Sort sort
419431
/// <seealso cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
420432
/// <exception cref="ArgumentNullException"><paramref name="query"/> or
421433
/// <paramref name="sort"/> is <c>null</c>.</exception>
434+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
422435
public virtual TopDocs SearchAfter(ScoreDoc? after, Query query, Filter? filter, int n, Sort sort, CancellationToken cancellationToken = default)
423436
{
424437
FieldDoc? fieldDoc = GetScoreDocAsFieldDocIfNotNull(after);
@@ -449,6 +462,7 @@ public virtual TopDocs SearchAfter(ScoreDoc? after, Query query, Filter? filter,
449462
/// <exception cref="IOException"> if there is a low-level I/O error </exception>
450463
/// <exception cref="ArgumentNullException"><paramref name="query"/> or
451464
/// <paramref name="sort"/> is <c>null</c>.</exception>
465+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
452466
public virtual TopFieldDocs Search(Query query, int n, Sort sort, CancellationToken cancellationToken = default)
453467
{
454468
return Search(CreateNormalizedWeight(query), n, sort, false, false, cancellationToken);
@@ -467,6 +481,7 @@ public virtual TopFieldDocs Search(Query query, int n, Sort sort, CancellationTo
467481
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
468482
/// <exception cref="ArgumentNullException"><paramref name="query"/> or
469483
/// <paramref name="sort"/> is <c>null</c>.</exception>
484+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
470485
public virtual TopDocs SearchAfter(ScoreDoc? after, Query query, int n, Sort sort, CancellationToken cancellationToken = default)
471486
{
472487
var fieldDoc = GetScoreDocAsFieldDocIfNotNull(after);
@@ -492,6 +507,7 @@ public virtual TopDocs SearchAfter(ScoreDoc? after, Query query, int n, Sort sor
492507
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
493508
/// <exception cref="ArgumentNullException"><paramref name="query"/> or
494509
/// <paramref name="sort"/> is <c>null</c>.</exception>
510+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
495511
public virtual TopDocs SearchAfter(ScoreDoc? after, Query query, Filter? filter, int n, Sort sort, bool doDocScores, bool doMaxScore, CancellationToken cancellationToken = default)
496512
{
497513
var fieldDoc = GetScoreDocAsFieldDocIfNotNull(after);
@@ -508,6 +524,7 @@ public virtual TopDocs SearchAfter(ScoreDoc? after, Query query, Filter? filter,
508524
/// <exception cref="BooleanQuery.TooManyClausesException"> If a query would exceed
509525
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
510526
/// <exception cref="ArgumentNullException"><paramref name="weight"/> is <c>null</c>.</exception>
527+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
511528
protected virtual TopDocs Search(Weight weight, ScoreDoc? after, int nDocs, CancellationToken cancellationToken = default)
512529
{
513530
int limit = reader.MaxDoc;
@@ -573,6 +590,7 @@ protected virtual TopDocs Search(Weight weight, ScoreDoc? after, int nDocs, Canc
573590
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
574591
/// <exception cref="ArgumentNullException"><paramref name="leaves"/> or
575592
/// <paramref name="weight"/> is <c>null</c>.</exception>
593+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
576594
protected virtual TopDocs Search(IList<AtomicReaderContext> leaves, Weight weight, ScoreDoc? after, int nDocs, CancellationToken cancellationToken = default)
577595
{
578596
// LUCENENET: Added guard clause
@@ -605,6 +623,7 @@ protected virtual TopDocs Search(IList<AtomicReaderContext> leaves, Weight weigh
605623
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
606624
/// <exception cref="ArgumentNullException"><paramref name="weight"/> or
607625
/// <paramref name="sort"/> is <c>null</c>.</exception>
626+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
608627
protected virtual TopFieldDocs Search(Weight weight, int nDocs, Sort sort, bool doDocScores, bool doMaxScore, CancellationToken cancellationToken = default)
609628
{
610629
return Search(weight, after: null, nDocs, sort, true, doDocScores, doMaxScore, cancellationToken);
@@ -617,6 +636,7 @@ protected virtual TopFieldDocs Search(Weight weight, int nDocs, Sort sort, bool
617636
/// </summary>
618637
/// <exception cref="ArgumentNullException"><paramref name="weight"/> or
619638
/// <paramref name="sort"/> is <c>null</c>.</exception>
639+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
620640
protected virtual TopFieldDocs Search(Weight weight, FieldDoc? after, int nDocs, Sort sort, bool fillFields, bool doDocScores, bool doMaxScore, CancellationToken cancellationToken = default)
621641
{
622642
if (sort is null)
@@ -676,6 +696,7 @@ protected virtual TopFieldDocs Search(Weight weight, FieldDoc? after, int nDocs,
676696
/// </summary>
677697
/// <exception cref="ArgumentNullException"><paramref name="leaves"/> or
678698
/// <paramref name="weight"/> is <c>null</c>.</exception>
699+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
679700
protected virtual TopFieldDocs Search(IList<AtomicReaderContext> leaves, Weight weight, FieldDoc? after, int nDocs, Sort sort, bool fillFields, bool doDocScores, bool doMaxScore, CancellationToken cancellationToken = default)
680701
{
681702
// LUCENENET: Added guard clause
@@ -715,6 +736,7 @@ protected virtual TopFieldDocs Search(IList<AtomicReaderContext> leaves, Weight
715736
/// <see cref="BooleanQuery.MaxClauseCount"/> clauses. </exception>
716737
/// <exception cref="ArgumentNullException"><paramref name="leaves"/>, <paramref name="weight"/>,
717738
/// or <paramref name="collector"/> is <c>null</c>.</exception>
739+
/// <exception cref="OperationCanceledException">If cancellation is requested via the <paramref name="cancellationToken"/>.</exception>
718740
protected virtual void Search(IList<AtomicReaderContext> leaves, Weight weight, ICollector collector, CancellationToken cancellationToken = default)
719741
{
720742
// LUCENENET: Added guard clauses
@@ -756,8 +778,6 @@ protected virtual void Search(IList<AtomicReaderContext> leaves, Weight weight,
756778
}
757779
}
758780
}
759-
760-
cancellationToken.ThrowIfCancellationRequested(); // LUCENENET specific - cancellation support
761781
}
762782

763783
/// <summary>

src/Lucene.Net/Search/package.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Code to search indices.
3535

3636
Lucene offers a wide variety of <xref:Lucene.Net.Search.Query> implementations, most of which are in this package, its subpackages ([Lucene.Net.Spans](xref:Lucene.Net.Search.Spans), [Lucene.Net.Payloads](xref:Lucene.Net.Search.Payloads)), or the [Lucene.Net.Queries module](../queries/Lucene.Net.Queries.html). These implementations can be combined in a wide variety of ways to provide complex querying capabilities along with information about where matches took place in the document collection. The [Query Classes](#query-classes) section below highlights some of the more important Query classes. For details on implementing your own Query class, see [Custom Queries -- Expert Level](#custom-queries--expert-level) below.
3737

38-
To perform a search, applications usually call [Search(Query, int)](xref:Lucene.Net.Search.IndexSearcher#Lucene_Net_Search_IndexSearcher_Search_Lucene_Net_Search_Query_System_Int32_) or [Search(Query, Filter, int)](xref:Lucene.Net.Search.IndexSearcher#Lucene_Net_Search_IndexSearcher_Search_Lucene_Net_Search_Query_Lucene_Net_Search_Filter_System_Int32_).
38+
To perform a search, applications usually call [Search(Query, int, CancellationToken)](xref:Lucene.Net.Search.IndexSearcher#Lucene_Net_Search_IndexSearcher_Search_Lucene_Net_Search_Query_System_Int32_System_Threading_CancellationToken_) or [Search(Query, Filter, int, CancellationToken)](xref:Lucene.Net.Search.IndexSearcher#Lucene_Net_Search_IndexSearcher_Search_Lucene_Net_Search_Query_Lucene_Net_Search_Filter_System_Int32_System_Threading_CancellationToken_).
3939

4040
Once a Query has been created and submitted to the [IndexSearcher](xref:Lucene.Net.Search.IndexSearcher), the scoring process begins. After some infrastructure setup, control finally passes to the [Weight](xref:Lucene.Net.Search.Weight) implementation and its [Scorer](xref:Lucene.Net.Search.Scorer) or [BulkScorer](xref:Lucene.Net.Search.BulkScorer) instances. See the [Algorithm](#appendix-search-algorithm) section for more notes on the process.
4141

src/Lucene.Net/overview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ and add documents to it with [AddDocument()](xref:Lucene.Net.Index.IndexWriter#L
118118
to build a query from a string; and
119119

120120
4. Create an [IndexSearcher](xref:Lucene.Net.Search.IndexSearcher)
121-
and pass the query to its [Search()](xref:Lucene.Net.Search.IndexSearcher#Lucene_Net_Search_IndexSearcher_Search_Lucene_Net_Search_Query_System_Int32_)
121+
and pass the query to its [Search()](xref:Lucene.Net.Search.IndexSearcher#Lucene_Net_Search_IndexSearcher_Search_Lucene_Net_Search_Query_System_Int32_System_Threading_CancellationToken_)
122122
method.
123123

124124
Some simple examples of code which does this are:

0 commit comments

Comments
 (0)