1717import org .apache .lucene .store .Directory ;
1818import org .elasticsearch .common .bytes .BytesArray ;
1919import org .elasticsearch .common .settings .Settings ;
20- import org .elasticsearch .index .IndexSettings ;
20+ import org .elasticsearch .index .fielddata .LongScriptDocValues ;
21+ import org .elasticsearch .index .fielddata .LongScriptFieldData ;
2122import org .elasticsearch .script .LongFieldScript ;
22- import org .elasticsearch .search .lookup .SearchLookup ;
2323import org .elasticsearch .test .ESSingleNodeTestCase ;
2424import org .elasticsearch .xcontent .XContentType ;
2525
2626import java .io .IOException ;
2727import java .util .Locale ;
2828import java .util .Map ;
29- import java .util .Set ;
3029
3130import static org .elasticsearch .xcontent .XContentFactory .jsonBuilder ;
3231import static org .hamcrest .Matchers .equalTo ;
@@ -41,7 +40,8 @@ public void testWithSourceProviderOptimization() throws IOException {
4140 var mapping = jsonBuilder ().startObject ().startObject ("runtime" ).startObject ("field" );
4241 mapping .field ("type" , "long" );
4342 mapping .endObject ().endObject ().endObject ();
44- var indexService = createIndex ("test-index" , Settings .builder ().put ("index.mapping.source.mode" , "synthetic" ).build (), mapping );
43+ var settings = Settings .builder ().put ("index.mapping.source.mode" , "synthetic" ).build ();
44+ var indexService = createIndex ("test-index" , settings , mapping );
4545
4646 int numDocs = 256 ;
4747 try (Directory directory = newDirectory (); IndexWriter iw = new IndexWriter (directory , new IndexWriterConfig ())) {
@@ -77,12 +77,15 @@ public void testWithSourceProviderOptimization() throws IOException {
7777 var termQuery = fieldType .termQuery (32 , context );
7878 assertThat (searcher .count (termQuery ), equalTo (1 ));
7979
80- // Test that runtime based block loader works as expected with the optimization:
81- var blockLoader = fieldType .blockLoader (blContext (context .lookup ()));
82- var columnReader = blockLoader .columnAtATimeReader (leafReaderContext );
83- var block = (TestBlock ) columnReader .read (TestBlock .factory (), TestBlock .docs (leafReaderContext ), 0 , false );
84- for (int i = 0 ; i < block .size (); i ++) {
85- assertThat (block .get (i ), equalTo ((long ) i ));
80+ // Test that script runtime field data works as expected with the optimization:
81+ var fieldData = (LongScriptFieldData ) context .getForField (fieldType , MappedFieldType .FielddataOperation .SCRIPT );
82+ var leafFieldData = fieldData .load (leafReaderContext );
83+ var sortedNumericDocValues = (LongScriptDocValues ) leafFieldData .getLongValues ();
84+ for (int i = 0 ; i < 256 ; i ++) {
85+ boolean result = sortedNumericDocValues .advanceExact (i );
86+ assertThat (result , equalTo (true ));
87+ assertThat (sortedNumericDocValues .docValueCount (), equalTo (1 ));
88+ assertThat (sortedNumericDocValues .nextValue (), equalTo ((long ) i ));
8689 }
8790 }
8891 }
@@ -125,53 +128,18 @@ public void testWithoutSourceProviderOptimization() throws IOException {
125128 var termQuery = fieldType .termQuery (32 , context );
126129 assertThat (searcher .count (termQuery ), equalTo (1 ));
127130
128- // Test that runtime based block loader works as expected with the optimization:
129- var blockLoader = fieldType .blockLoader (blContext (context .lookup ()));
130- var columnReader = blockLoader .columnAtATimeReader (leafReaderContext );
131- var block = (TestBlock ) columnReader .read (TestBlock .factory (), TestBlock .docs (leafReaderContext ), 0 , false );
132- for (int i = 0 ; i < block .size (); i ++) {
133- assertThat (block .get (i ), equalTo ((long ) i ));
131+ // Test that script runtime field data works as expected with the optimization:
132+ var fieldData = (LongScriptFieldData ) context .getForField (fieldType , MappedFieldType .FielddataOperation .SCRIPT );
133+ var leafFieldData = fieldData .load (leafReaderContext );
134+ var sortedNumericDocValues = (LongScriptDocValues ) leafFieldData .getLongValues ();
135+ for (int i = 0 ; i < 256 ; i ++) {
136+ boolean result = sortedNumericDocValues .advanceExact (i );
137+ assertThat (result , equalTo (true ));
138+ assertThat (sortedNumericDocValues .docValueCount (), equalTo (1 ));
139+ assertThat (sortedNumericDocValues .nextValue (), equalTo ((long ) i ));
134140 }
135141 }
136142 }
137143 }
138144
139- static MappedFieldType .BlockLoaderContext blContext (SearchLookup lookup ) {
140- return new MappedFieldType .BlockLoaderContext () {
141- @ Override
142- public String indexName () {
143- throw new UnsupportedOperationException ();
144- }
145-
146- @ Override
147- public IndexSettings indexSettings () {
148- throw new UnsupportedOperationException ();
149- }
150-
151- @ Override
152- public MappedFieldType .FieldExtractPreference fieldExtractPreference () {
153- return MappedFieldType .FieldExtractPreference .NONE ;
154- }
155-
156- @ Override
157- public SearchLookup lookup () {
158- return lookup ;
159- }
160-
161- @ Override
162- public Set <String > sourcePaths (String name ) {
163- throw new UnsupportedOperationException ();
164- }
165-
166- @ Override
167- public String parentField (String field ) {
168- throw new UnsupportedOperationException ();
169- }
170-
171- @ Override
172- public FieldNamesFieldMapper .FieldNamesFieldType fieldNames () {
173- return FieldNamesFieldMapper .FieldNamesFieldType .get (true );
174- }
175- };
176- }
177145}
0 commit comments