You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mv...@apache.org on 2012/10/31 17:56:48 UTC
svn commit: r1404248 - in /lucene/dev/trunk/lucene: CHANGES.txt
join/src/java/org/apache/lucene/search/join/ToParentBlockJoinQuery.java
join/src/test/org/apache/lucene/search/join/TestBlockJoin.java
Author: mvg
Date: Wed Oct 31 16:56:48 2012
New Revision: 1404248
URL: http://svn.apache.org/viewvc?rev=1404248&view=rev
Log:
LUCENE-4513: Fixed that deleted nested docs are scored into the parent doc.
Modified:
lucene/dev/trunk/lucene/CHANGES.txt
lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinQuery.java
lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java
Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1404248&r1=1404247&r2=1404248&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Wed Oct 31 16:56:48 2012
@@ -110,6 +110,9 @@ Bug Fixes
happened in the IndexWriter instance. (Ivan Vasilev via Mike
McCandless)
+* LUCENE-4513: Fixed that deleted nested docs are scored into the
+ parent doc when using ToParentBlockJoinQuery. (Martijn van Groningen)
+
Optimizations
* LUCENE-4512: Additional memory savings for CompressingStoredFieldsIndex.MEMORY_CHUNK
Modified: lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinQuery.java?rev=1404248&r1=1404247&r2=1404248&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinQuery.java (original)
+++ lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinQuery.java Wed Oct 31 16:56:48 2012
@@ -160,8 +160,8 @@ public class ToParentBlockJoinQuery exte
public Scorer scorer(AtomicReaderContext readerContext, boolean scoreDocsInOrder,
boolean topScorer, Bits acceptDocs) throws IOException {
- // Pass scoreDocsInOrder true, topScorer false to our sub:
- final Scorer childScorer = childWeight.scorer(readerContext, true, false, null);
+ // Pass scoreDocsInOrder true, topScorer false to our sub and the live docs:
+ final Scorer childScorer = childWeight.scorer(readerContext, true, false, readerContext.reader().getLiveDocs());
if (childScorer == null) {
// No matches
Modified: lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java?rev=1404248&r1=1404247&r2=1404248&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java (original)
+++ lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java Wed Oct 31 16:56:48 2012
@@ -272,6 +272,62 @@ public class TestBlockJoin extends Lucen
dir.close();
}
+ public void testNestedDocScoringWithDeletes() throws Exception {
+ final Directory dir = newDirectory();
+ final RandomIndexWriter w = new RandomIndexWriter(
+ random(),
+ dir,
+ newIndexWriterConfig(TEST_VERSION_CURRENT,
+ new MockAnalyzer(random())).setMergePolicy(NoMergePolicy.COMPOUND_FILES));
+
+ // Cannot assert this since we use NoMergePolicy:
+ w.setDoRandomForceMergeAssert(false);
+
+ List<Document> docs = new ArrayList<Document>();
+ docs.add(makeJob("java", 2007));
+ docs.add(makeJob("python", 2010));
+ docs.add(makeResume("Lisa", "United Kingdom"));
+ w.addDocuments(docs);
+
+ docs.clear();
+ docs.add(makeJob("c", 1999));
+ docs.add(makeJob("ruby", 2005));
+ docs.add(makeJob("java", 2006));
+ docs.add(makeResume("Frank", "United States"));
+ w.addDocuments(docs);
+
+ w.commit();
+ IndexSearcher s = newSearcher(DirectoryReader.open(dir));
+
+ ToParentBlockJoinQuery q = new ToParentBlockJoinQuery(
+ NumericRangeQuery.newIntRange("year", 1990, 2010, true, true),
+ new CachingWrapperFilter(new QueryWrapperFilter(new TermQuery(new Term("docType", "resume")))),
+ ScoreMode.Total
+ );
+
+ TopDocs topDocs = s.search(q, 10);
+ assertEquals(2, topDocs.totalHits);
+ assertEquals(6, topDocs.scoreDocs[0].doc);
+ assertEquals(3.0f, topDocs.scoreDocs[0].score, 0.0f);
+ assertEquals(2, topDocs.scoreDocs[1].doc);
+ assertEquals(2.0f, topDocs.scoreDocs[1].score, 0.0f);
+
+ s.getIndexReader().close();
+ w.deleteDocuments(new Term("skill", "java"));
+ w.close();
+ s = newSearcher(DirectoryReader.open(dir));
+
+ topDocs = s.search(q, 10);
+ assertEquals(2, topDocs.totalHits);
+ assertEquals(6, topDocs.scoreDocs[0].doc);
+ assertEquals(2.0f, topDocs.scoreDocs[0].score, 0.0f);
+ assertEquals(2, topDocs.scoreDocs[1].doc);
+ assertEquals(1.0f, topDocs.scoreDocs[1].score, 0.0f);
+
+ s.getIndexReader().close();
+ dir.close();
+ }
+
private String[][] getRandomFields(int maxUniqueValues) {
final String[][] fields = new String[_TestUtil.nextInt(random(), 2, 4)][];