[
https://issues.apache.org/jira/browse/LUCENENET-598?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Shad Storhaug resolved LUCENENET-598.
-------------------------------------
Resolution: Fixed
Fixed @ GitHub: https://github.com/apache/lucenenet/issues/274
> NullReferenceException in DrillSideways.Search - ReqExclScorer.GetCost
> ----------------------------------------------------------------------
>
> Key: LUCENENET-598
> URL: https://issues.apache.org/jira/browse/LUCENENET-598
> Project: Lucene.Net
> Issue Type: Bug
> Components: Lucene.Net.Facet
> Affects Versions: Lucene.Net 4.8.0
> Reporter: Harold Harkema
> Priority: Major
>
> We have migrated all our Lucene 3.0 code to Lucene 4.8. However
> when searching with DrillSideways.Search we sometimes get a
> NullReferenceException with this stacktrace:
> 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
> I managed to reproduce this in an unit test. If you add this unit test for
> example to TestDrillSideways.cs it will throw a NullReferenceException when
> running. 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.
> {code}
> [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);
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)