Thanks for the quick response. I have been struggling a bit more with this and
managed to create an unit test that reproduces the error.
This unit test throws an NRE.
You can add this unit test to TestDrillSideways.cs.
This unit test should give 0 results because the criteria "Age != 23 AND Name
== *e*" matches nothing. However I sometimes have the same issue when the query
returns multiple results but that is currently a bit harder to reproduce in a
unit test.
[Test]
public virtual void TestFacetNRE()
{
Directory dir = NewDirectory();
Directory taxoDir = NewDirectory();
// Writes facet ords to a separate directory from the
// main index:
var taxoWriter = new DirectoryTaxonomyWriter(taxoDir,
OpenMode.CREATE);
FacetsConfig config = new FacetsConfig();
RandomIndexWriter writer = new RandomIndexWriter(Random(), dir,
Similarity, TimeZone);
Document doc = new Document();
doc.Add(new Field("Name", "John",
Documents.StringField.TYPE_STORED));
doc.Add(new Field("Age", "19", Documents.StringField.TYPE_STORED));
doc.Add(new FacetField("Function", "Developer"));
writer.AddDocument(config.Build(taxoWriter, doc));
doc = new Document();
doc.Add(new Field("Name", "Steven",
Documents.StringField.TYPE_STORED));
doc.Add(new Field("Age", "23", Documents.StringField.TYPE_STORED));
doc.Add(new FacetField("Function", "Sales"));
writer.AddDocument(config.Build(taxoWriter, doc));
// NRT open
IndexSearcher searcher = NewSearcher(writer.Reader);
// NRT open
var taxoReader = new DirectoryTaxonomyReader(taxoWriter);
DrillSideways ds = new DrillSideways(searcher, config, taxoReader);
var query = new BooleanQuery(true);
query.Add(new TermQuery(new Term("Age", "23")), Occur.MUST_NOT);
query.Add(new WildcardQuery(new Term("Name", "*e*")), Occur.MUST);
var mydrillDownQuery = new DrillDownQuery(config, query);
mydrillDownQuery.Add("Function", "Developer");
var z = ds.Search(mydrillDownQuery, null, null, 10, null, false,
false);
IOUtils.Dispose(searcher.IndexReader, taxoReader, writer,
taxoWriter, dir, taxoDir);
}
-----Original Message-----
From: Shad Storhaug [mailto:[email protected]]
Sent: dinsdag 19 december 2017 11:34
To: [email protected]
Subject: RE: NullReferenceException in DrillSideways.Search
Harold,
Thanks for the report.
I took a look and it seems the ReqExclScorer requires a scorer to be passed and
it is initially invalid until NextDoc() is called. See
https://github.com/apache/lucenenet/blob/a3a12967b250e8e7e5f623f0ba7572ec64f479ac/src/Lucene.Net/Search/ReqExclScorer.cs#L115
Other than that I can't tell you much without seeing a code sample that can be
executed to determine exactly why the error is happening and whether this is a
bug or by design.
Thanks,
Shad Storhaug (NightOwl888)
-----Original Message-----
From: Harold Harkema [mailto:[email protected]]
Sent: Tuesday, December 19, 2017 5:04 PM
To: [email protected]
Subject: NullReferenceException in DrillSideways.Search
Hi,
We have converted our 3.0.3 solution to Lucene 4.8.0-beta00005. Most of it
works fine and a lot better/faster! Thanks for the good work!
However we have an issue with DrillSideways.Search.
Is this a known issue or could it be our code?
Or any suggestions where to look or how to troubleshoot this?
This is part of the stacktrace. The rest of the stacktrace is only our code.
System.NullReferenceException: Object reference not set to an instance of an
object.
at Lucene.Net.Search.ReqExclScorer.GetCost() in
C:\BuildAgent\work\b1b63ca15b99dddb\src\Lucene.Net\Search\ReqExclScorer.cs:line
148
at Lucene.Net.Facet.DrillSidewaysScorer.Score(ICollector collector, Int32
maxDoc) in
C:\BuildAgent\work\b1b63ca15b99dddb\src\Lucene.Net.Facet\DrillSidewaysScorer.cs:line
139
at Lucene.Net.Search.IndexSearcher.Search(IList`1 leaves, Weight weight,
ICollector collector) in
C:\BuildAgent\work\b1b63ca15b99dddb\src\Lucene.Net\Search\IndexSearcher.cs:line
649
at Lucene.Net.Facet.DrillSideways.Search(DrillDownQuery query, ICollector
hitCollector) in
C:\BuildAgent\work\b1b63ca15b99dddb\src\Lucene.Net.Facet\DrillSideways.cs:line
194
at Lucene.Net.Facet.DrillSideways.Search(ScoreDoc after, DrillDownQuery
query, Int32 topN) in
C:\BuildAgent\work\b1b63ca15b99dddb\src\Lucene.Net.Facet\DrillSideways.cs:line
249
Harold