77
88package org .elasticsearch .xpack .patternedtext ;
99
10+ import org .apache .lucene .index .LeafReader ;
1011import org .apache .lucene .index .LeafReaderContext ;
11- import org .apache .lucene .index .SortedSetDocValues ;
1212import org .apache .lucene .search .SortField ;
1313import org .apache .lucene .util .BytesRef ;
1414import org .elasticsearch .common .util .BigArrays ;
1515import org .elasticsearch .index .fielddata .IndexFieldData ;
1616import org .elasticsearch .index .fielddata .IndexFieldDataCache ;
1717import org .elasticsearch .index .fielddata .LeafFieldData ;
18- import org .elasticsearch .index .fielddata .LeafOrdinalsFieldData ;
1918import org .elasticsearch .index .fielddata .SortedBinaryDocValues ;
20- import org .elasticsearch .index .fielddata .plain .SortedSetOrdinalsIndexFieldData ;
2119import org .elasticsearch .indices .breaker .CircuitBreakerService ;
2220import org .elasticsearch .script .field .DocValuesScriptFieldFactory ;
2321import org .elasticsearch .script .field .KeywordDocValuesField ;
2927import org .elasticsearch .search .sort .SortOrder ;
3028
3129import java .io .IOException ;
30+ import java .io .UncheckedIOException ;
3231
3332public class PatternedTextIndexFieldData implements IndexFieldData <LeafFieldData > {
3433
35- private final SortedSetOrdinalsIndexFieldData templateFieldData ;
36- private final SortedSetOrdinalsIndexFieldData argsFieldData ;
37- private final ToScriptFieldFactory <SortedBinaryDocValues > toScriptFieldFactory ;
38- private final String name ;
34+ private final PatternedTextFieldType fieldType ;
3935
4036 static class Builder implements IndexFieldData .Builder {
4137
42- final String name ;
43- final SortedSetOrdinalsIndexFieldData .Builder templateFieldDataBuilder ;
44- final SortedSetOrdinalsIndexFieldData .Builder argsFieldDataBuilder ;
45-
46- Builder (
47- String name ,
48- SortedSetOrdinalsIndexFieldData .Builder templateFieldData ,
49- SortedSetOrdinalsIndexFieldData .Builder argsFieldData
50- ) {
51- this .name = name ;
52- this .templateFieldDataBuilder = templateFieldData ;
53- this .argsFieldDataBuilder = argsFieldData ;
38+ final PatternedTextFieldType fieldType ;
39+
40+ Builder (PatternedTextFieldType fieldType ) {
41+ this .fieldType = fieldType ;
5442 }
5543
5644 public PatternedTextIndexFieldData build (IndexFieldDataCache cache , CircuitBreakerService breakerService ) {
57- SortedSetOrdinalsIndexFieldData templateFieldData = templateFieldDataBuilder .build (cache , breakerService );
58- SortedSetOrdinalsIndexFieldData argsFieldData = argsFieldDataBuilder .build (cache , breakerService );
59- ToScriptFieldFactory <SortedBinaryDocValues > factory = KeywordDocValuesField ::new ;
60- return new PatternedTextIndexFieldData (name , factory , templateFieldData , argsFieldData );
45+ return new PatternedTextIndexFieldData (fieldType );
6146 }
6247 }
6348
64- PatternedTextIndexFieldData (
65- String name ,
66- ToScriptFieldFactory <SortedBinaryDocValues > toScriptFieldFactory ,
67- SortedSetOrdinalsIndexFieldData templateFieldData ,
68- SortedSetOrdinalsIndexFieldData argsFieldData
69- ) {
70- this .name = name ;
71- this .templateFieldData = templateFieldData ;
72- this .argsFieldData = argsFieldData ;
73- this .toScriptFieldFactory = toScriptFieldFactory ;
49+ PatternedTextIndexFieldData (PatternedTextFieldType fieldType ) {
50+ this .fieldType = fieldType ;
7451 }
7552
7653 @ Override
7754 public String getFieldName () {
78- return name ;
55+ return fieldType . name () ;
7956 }
8057
8158 @ Override
@@ -85,24 +62,32 @@ public ValuesSourceType getValuesSourceType() {
8562
8663 @ Override
8764 public LeafFieldData load (LeafReaderContext context ) {
88- return loadDirect (context );
65+ try {
66+ return loadDirect (context );
67+ } catch (IOException e ) {
68+ throw new UncheckedIOException (e );
69+ }
8970 }
9071
9172 @ Override
92- public LeafFieldData loadDirect (LeafReaderContext context ) {
93- LeafOrdinalsFieldData leafTemplateFieldData = templateFieldData .loadDirect (context );
94- LeafOrdinalsFieldData leafArgsFieldData = argsFieldData .loadDirect (context );
73+ public LeafFieldData loadDirect (LeafReaderContext context ) throws IOException {
74+ LeafReader leafReader = context .reader ();
75+ PatternedTextDocValues docValues = PatternedTextDocValues .from (
76+ leafReader ,
77+ fieldType .templateFieldName (),
78+ fieldType .argsFieldName ()
79+ );
9580 return new LeafFieldData () {
81+
82+ final ToScriptFieldFactory <SortedBinaryDocValues > factory = KeywordDocValuesField ::new ;
83+
9684 @ Override
9785 public DocValuesScriptFieldFactory getScriptFieldFactory (String name ) {
98- return toScriptFieldFactory .getScriptFieldFactory (getBytesValues (), name );
86+ return factory .getScriptFieldFactory (getBytesValues (), name );
9987 }
10088
10189 @ Override
10290 public SortedBinaryDocValues getBytesValues () {
103- SortedSetDocValues templateDocValues = leafTemplateFieldData .getOrdinalsValues ();
104- SortedSetDocValues argsDocValues = leafArgsFieldData .getOrdinalsValues ();
105- var docValues = new PatternedTextDocValues (templateDocValues , argsDocValues );
10691 return new SortedBinaryDocValues () {
10792 @ Override
10893 public boolean advanceExact (int doc ) throws IOException {
@@ -123,14 +108,14 @@ public BytesRef nextValue() throws IOException {
123108
124109 @ Override
125110 public long ramBytesUsed () {
126- return leafTemplateFieldData . ramBytesUsed () + leafArgsFieldData . ramBytesUsed () ;
111+ return 1L ;
127112 }
128113 };
129114 }
130115
131116 @ Override
132117 public SortField sortField (Object missingValue , MultiValueMode sortMode , XFieldComparatorSource .Nested nested , boolean reverse ) {
133- return templateFieldData . sortField ( missingValue , sortMode , nested , reverse );
118+ throw new IllegalArgumentException ( "not supported for source patterned text field type" );
134119 }
135120
136121 @ Override
0 commit comments