Skip to content

Commit

Permalink
Updates paging test
Browse files Browse the repository at this point in the history
  • Loading branch information
Shazwazza committed Jan 10, 2025
1 parent 3c5b47e commit 8275c80
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 39 deletions.
8 changes: 4 additions & 4 deletions src/Examine.Lucene/Search/LuceneSearchExecutor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ public ISearchResults Execute()
// See https://cwiki.apache.org/confluence/display/lucene/ImproveSearchingSpeed
foreach (var scoreDoc in topDocs.ScoreDocs)
{
var result = GetSearchResult(scoreDoc, topDocs, searcher.IndexSearcher);
var result = GetSearchResult(scoreDoc, searcher.IndexSearcher);
results.Add(result);
}

Expand Down Expand Up @@ -185,7 +185,7 @@ internal static SearchAfterOptions GetSearchAfterOptions(TopDocs topDocs)
return null;
}

private LuceneSearchResult GetSearchResult(ScoreDoc scoreDoc, TopDocs topDocs, IndexSearcher luceneSearcher)
private LuceneSearchResult GetSearchResult(ScoreDoc scoreDoc, IndexSearcher luceneSearcher)
{
var docId = scoreDoc.Doc;
Document doc;
Expand Down Expand Up @@ -257,7 +257,7 @@ private bool CheckQueryForExtractTerms(Query query)
{
if (query is BooleanQuery bq)
{
foreach (BooleanClause clause in bq.Clauses)
foreach (var clause in bq.Clauses)
{
//recurse
var check = CheckQueryForExtractTerms(clause.Query);
Expand All @@ -273,7 +273,7 @@ private bool CheckQueryForExtractTerms(Query query)
return CheckQueryForExtractTerms(lbq.Wrapped);
}

Type queryType = query.GetType();
var queryType = query.GetType();

if (typeof(TermRangeQuery).IsAssignableFrom(queryType)
|| typeof(WildcardQuery).IsAssignableFrom(queryType)
Expand Down
94 changes: 59 additions & 35 deletions src/Examine.Test/Examine.Lucene/Search/FluentApiTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using Lucene.Net.QueryParsers.Classic;
using Lucene.Net.Search;
using NUnit.Framework;
using NUnit.Framework.Constraints;



Expand Down Expand Up @@ -1499,7 +1500,9 @@ public void Standard_Results_Sorted_By_Score()
var next = results.ElementAtOrDefault(i + 1);

if (next == null)
{
break;
}

Assert.IsTrue(curr.Score >= next.Score, string.Format("Result at index {0} must have a higher score than result at index {1}", i, i + 1));
}
Expand Down Expand Up @@ -2253,7 +2256,7 @@ public void By_Id()
Assert.AreEqual(1, results.TotalItemCount);
}
}

[Ignore("This test needs to be updated to ensure that searching calls GetFieldInternalQuery with useQueryParser = false, see https://github.com/Shazwazza/Examine/issues/335#issuecomment-1834677581")]
[Test]
public void Query_With_Category_Multi_Threaded()
Expand Down Expand Up @@ -2568,56 +2571,77 @@ public void Paging_With_Skip_Take()
using (var luceneDir = new RandomIdRAMDirectory())
using (var indexer = GetTestIndex(luceneDir, analyzer))
{
indexer.IndexItems(new[] {
ValueSet.FromObject(1.ToString(), "content",
new { nodeName = "umbraco", headerText = "world", writerName = "administrator" }),
ValueSet.FromObject(2.ToString(), "content",
new { nodeName = "umbraco", headerText = "umbraco", writerName = "administrator" }),
ValueSet.FromObject(3.ToString(), "content",
new { nodeName = "umbraco", headerText = "umbraco", writerName = "administrator" }),
ValueSet.FromObject(4.ToString(), "content",
new { nodeName = "hello", headerText = "world", writerName = "blah" }),
ValueSet.FromObject(5.ToString(), "content",
new { nodeName = "umbraco", headerText = "umbraco", writerName = "administrator" }),
ValueSet.FromObject(6.ToString(), "content",
new { nodeName = "umbraco", headerText = "umbraco", writerName = "administrator" })
});
var valueSets = new List<ValueSet>();
for (var i = 0; i < 15000; i++)
{
valueSets.Add(
ValueSet.FromObject(i.ToString(), "content",
new { nodeName = "umbraco", headerText = "world", writerName = "administrator" }));
}

indexer.IndexItems(valueSets);

var searcher = indexer.Searcher;

//Arrange

var sc = searcher.CreateQuery("content").Field("writerName", "administrator");
int pageIndex = 0;
int pageSize = 2;
int pageSize = 100;
int pagedCount = 0;

//Act

var results = sc
.Execute(QueryOptions.SkipTake(pageIndex * pageSize, pageSize))
.ToList();
Assert.AreEqual(2, results.Count);
while (true)
{
var results = sc
.Execute(QueryOptions.SkipTake(pageIndex * pageSize, pageSize))
.ToList();

pageIndex++;
if (results.Count == 0)
{
break;
}
Assert.AreEqual(pageSize, results.Count);
pageIndex++;
pagedCount++;
}

results = sc
.Execute(QueryOptions.SkipTake(pageIndex * pageSize, pageSize))
.ToList();
Assert.AreEqual(2, results.Count);
// This will not proceed further than 100 paged count because the limit for paged data sets is 10K.
Assert.AreEqual(100, pagedCount);

pageIndex++;
// Now, page with SearchAfter:
pageIndex = 0;
pageSize = 100;
pagedCount = 0;
SearchAfterOptions searchAfter = null;
while (true)
{
var luceneResults = sc.ExecuteWithLucene(
new LuceneQueryOptions(pageIndex * pageSize, pageSize, searchAfter));

results = sc
.Execute(QueryOptions.SkipTake(pageIndex * pageSize, pageSize))
.ToList();
Assert.AreEqual(1, results.Count);
if (luceneResults.SearchAfter is not null)
{
searchAfter = new SearchAfterOptions(
luceneResults.SearchAfter.DocumentId,
luceneResults.SearchAfter.DocumentScore,
luceneResults.SearchAfter.Fields,
luceneResults.SearchAfter.ShardIndex.Value);
}

pageIndex++;
var results = luceneResults.ToList();

if (results.Count == 0)
{
break;
}

Assert.AreEqual(pageSize, results.Count);
pageIndex++;
pagedCount++;
}

results = sc
.Execute(QueryOptions.SkipTake(pageIndex * pageSize, pageSize))
.ToList();
Assert.AreEqual(0, results.Count);
Assert.AreEqual(150, pagedCount);
}
}

Expand Down

0 comments on commit 8275c80

Please sign in to comment.