@@ -88,6 +88,24 @@ public void testDocValuesRewriteWithPointValuesPresent() throws IOException {
8888 dir .close ();
8989 }
9090
91+ public void testDocValuesRewriteWithDocValuesSkipperPresent () throws IOException {
92+ Directory dir = newDirectory ();
93+ RandomIndexWriter iw = new RandomIndexWriter (random (), dir );
94+ final int numDocs = atLeast (100 );
95+ for (int i = 0 ; i < numDocs ; ++i ) {
96+ Document doc = new Document ();
97+ doc .add (NumericDocValuesField .indexedField ("dim" , 2 ));
98+ iw .addDocument (doc );
99+ }
100+ iw .commit ();
101+ final IndexReader reader = iw .getReader ();
102+ iw .close ();
103+
104+ assertEquals (new MatchAllDocsQuery (), new FieldExistsQuery ("dim" ).rewrite (newSearcher (reader )));
105+ reader .close ();
106+ dir .close ();
107+ }
108+
91109 public void testDocValuesNoRewrite () throws IOException {
92110 Directory dir = newDirectory ();
93111 RandomIndexWriter iw = new RandomIndexWriter (random (), dir );
@@ -741,6 +759,41 @@ private float[] randomVector(int dim) {
741759 return v ;
742760 }
743761
762+ public void testDeleteDocValues () throws IOException {
763+ try (Directory dir = newDirectory ();
764+ RandomIndexWriter iw = new RandomIndexWriter (random (), dir )) {
765+ final int numDocs = atLeast (100 );
766+
767+ boolean allDocsHaveValue = random ().nextBoolean ();
768+ BitSet docWithValue = new FixedBitSet (numDocs );
769+ for (int i = 0 ; i < numDocs ; ++i ) {
770+ Document doc = new Document ();
771+ if (allDocsHaveValue || random ().nextBoolean ()) {
772+ doc .add (NumericDocValuesField .indexedField ("num" , i ));
773+ docWithValue .set (i );
774+ }
775+ doc .add (new StringField ("id" , Integer .toString (i ), Store .NO ));
776+ iw .addDocument (doc );
777+ }
778+
779+ if (random ().nextBoolean ()) {
780+ final int numDeleted = random ().nextInt (numDocs ) + 1 ;
781+ for (int i = 0 ; i < numDeleted ; ++i ) {
782+ int id = random ().nextInt (numDocs );
783+ iw .deleteDocuments (new Term ("id" , Integer .toString (id )));
784+ docWithValue .clear (id );
785+ }
786+ }
787+
788+ try (IndexReader reader = iw .getReader ()) {
789+ final IndexSearcher searcher = newSearcher (reader );
790+
791+ final int count = searcher .count (new FieldExistsQuery ("num" ));
792+ assertEquals (docWithValue .cardinality (), count );
793+ }
794+ }
795+ }
796+
744797 public void testDeleteAllPointDocs () throws Exception {
745798 try (Directory dir = newDirectory ();
746799 RandomIndexWriter iw = new RandomIndexWriter (random (), dir )) {
0 commit comments