|
27 | 27 | import org.elasticsearch.common.regex.Regex;
|
28 | 28 | import org.elasticsearch.common.settings.Settings;
|
29 | 29 | import org.elasticsearch.common.xcontent.XContentParser;
|
30 |
| -import org.elasticsearch.index.field.data.FieldDataType; |
| 30 | +import org.elasticsearch.index.fielddata.IndexFieldData; |
| 31 | +import org.elasticsearch.index.fielddata.IndexNumericFieldData; |
| 32 | +import org.elasticsearch.index.fielddata.IndexOrdinalFieldData; |
31 | 33 | import org.elasticsearch.index.mapper.FieldMapper;
|
32 |
| -import org.elasticsearch.index.mapper.ip.IpFieldMapper; |
| 34 | +import org.elasticsearch.script.SearchScript; |
33 | 35 | import org.elasticsearch.search.facet.Facet;
|
34 | 36 | import org.elasticsearch.search.facet.FacetCollector;
|
| 37 | +import org.elasticsearch.search.facet.FacetPhaseExecutionException; |
35 | 38 | import org.elasticsearch.search.facet.FacetProcessor;
|
36 |
| -import org.elasticsearch.search.facet.terms.bytes.TermsByteFacetCollector; |
37 |
| -import org.elasticsearch.search.facet.terms.bytes.TermsByteOrdinalsFacetCollector; |
38 | 39 | import org.elasticsearch.search.facet.terms.doubles.TermsDoubleFacetCollector;
|
39 |
| -import org.elasticsearch.search.facet.terms.doubles.TermsDoubleOrdinalsFacetCollector; |
40 |
| -import org.elasticsearch.search.facet.terms.floats.TermsFloatFacetCollector; |
41 |
| -import org.elasticsearch.search.facet.terms.floats.TermsFloatOrdinalsFacetCollector; |
42 | 40 | import org.elasticsearch.search.facet.terms.index.IndexNameFacetCollector;
|
43 |
| -import org.elasticsearch.search.facet.terms.ints.TermsIntFacetCollector; |
44 |
| -import org.elasticsearch.search.facet.terms.ints.TermsIntOrdinalsFacetCollector; |
45 |
| -import org.elasticsearch.search.facet.terms.ip.TermsIpFacetCollector; |
46 |
| -import org.elasticsearch.search.facet.terms.ip.TermsIpOrdinalsFacetCollector; |
47 | 41 | import org.elasticsearch.search.facet.terms.longs.TermsLongFacetCollector;
|
48 |
| -import org.elasticsearch.search.facet.terms.longs.TermsLongOrdinalsFacetCollector; |
49 |
| -import org.elasticsearch.search.facet.terms.shorts.TermsShortFacetCollector; |
50 |
| -import org.elasticsearch.search.facet.terms.shorts.TermsShortOrdinalsFacetCollector; |
51 | 42 | import org.elasticsearch.search.facet.terms.strings.FieldsTermsStringFacetCollector;
|
52 | 43 | import org.elasticsearch.search.facet.terms.strings.ScriptTermsStringFieldFacetCollector;
|
53 | 44 | import org.elasticsearch.search.facet.terms.strings.TermsStringFacetCollector;
|
@@ -147,64 +138,41 @@ public FacetCollector parse(String facetName, XContentParser parser, SearchConte
|
147 | 138 | if (regex != null) {
|
148 | 139 | pattern = Regex.compile(regex, regexFlags);
|
149 | 140 | }
|
| 141 | + |
| 142 | + SearchScript searchScript = null; |
| 143 | + if (script != null) { |
| 144 | + searchScript = context.scriptService().search(context.lookup(), scriptLang, script, params); |
| 145 | + } |
| 146 | + |
150 | 147 | if (fieldsNames != null) {
|
151 |
| - return new FieldsTermsStringFacetCollector(facetName, fieldsNames, size, comparatorType, allTerms, context, excluded, pattern, scriptLang, script, params); |
| 148 | + return new FieldsTermsStringFacetCollector(facetName, fieldsNames, size, comparatorType, allTerms, context, excluded, pattern, searchScript); |
152 | 149 | }
|
153 | 150 | if (field == null && fieldsNames == null && script != null) {
|
154 | 151 | return new ScriptTermsStringFieldFacetCollector(facetName, size, comparatorType, context, excluded, pattern, scriptLang, script, params);
|
155 | 152 | }
|
156 | 153 |
|
157 | 154 | FieldMapper fieldMapper = context.smartNameFieldMapper(field);
|
158 |
| - if (fieldMapper != null) { |
159 |
| - if (fieldMapper instanceof IpFieldMapper) { |
160 |
| - if (script != null || "map".equals(executionHint)) { |
161 |
| - return new TermsIpFacetCollector(facetName, field, size, comparatorType, allTerms, context, scriptLang, script, params); |
162 |
| - } else { |
163 |
| - return new TermsIpOrdinalsFacetCollector(facetName, field, size, comparatorType, allTerms, context, null); |
164 |
| - } |
165 |
| - } else if (fieldMapper.fieldDataType() == FieldDataType.DefaultTypes.LONG) { |
166 |
| - if (script != null || "map".equals(executionHint)) { |
167 |
| - return new TermsLongFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded, scriptLang, script, params); |
168 |
| - } else { |
169 |
| - return new TermsLongOrdinalsFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded); |
170 |
| - } |
171 |
| - } else if (fieldMapper.fieldDataType() == FieldDataType.DefaultTypes.DOUBLE) { |
172 |
| - if (script != null) { |
173 |
| - return new TermsDoubleFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded, scriptLang, script, params); |
174 |
| - } else { |
175 |
| - return new TermsDoubleOrdinalsFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded); |
176 |
| - } |
177 |
| - } else if (fieldMapper.fieldDataType() == FieldDataType.DefaultTypes.INT) { |
178 |
| - if (script != null || "map".equals(executionHint)) { |
179 |
| - return new TermsIntFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded, scriptLang, script, params); |
180 |
| - } else { |
181 |
| - return new TermsIntOrdinalsFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded); |
182 |
| - } |
183 |
| - } else if (fieldMapper.fieldDataType() == FieldDataType.DefaultTypes.FLOAT) { |
184 |
| - if (script != null || "map".equals(executionHint)) { |
185 |
| - return new TermsFloatFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded, scriptLang, script, params); |
186 |
| - } else { |
187 |
| - return new TermsFloatOrdinalsFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded); |
188 |
| - } |
189 |
| - } else if (fieldMapper.fieldDataType() == FieldDataType.DefaultTypes.SHORT) { |
190 |
| - if (script != null || "map".equals(executionHint)) { |
191 |
| - return new TermsShortFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded, scriptLang, script, params); |
192 |
| - } else { |
193 |
| - return new TermsShortOrdinalsFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded); |
194 |
| - } |
195 |
| - } else if (fieldMapper.fieldDataType() == FieldDataType.DefaultTypes.BYTE) { |
196 |
| - if (script != null || "map".equals(executionHint)) { |
197 |
| - return new TermsByteFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded, scriptLang, script, params); |
198 |
| - } else { |
199 |
| - return new TermsByteOrdinalsFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded); |
200 |
| - } |
201 |
| - } else if (fieldMapper.fieldDataType() == FieldDataType.DefaultTypes.STRING) { |
202 |
| - if (script == null && !"map".equals(executionHint)) { |
203 |
| - return new TermsStringOrdinalsFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded, pattern); |
204 |
| - } |
| 155 | + if (fieldMapper == null) { |
| 156 | + throw new FacetPhaseExecutionException(facetName, "failed to find mapping for [" + field + "]"); |
| 157 | + } |
| 158 | + |
| 159 | + IndexFieldData indexFieldData = context.fieldData().getForField(fieldMapper); |
| 160 | + if (indexFieldData instanceof IndexNumericFieldData) { |
| 161 | + IndexNumericFieldData indexNumericFieldData = (IndexNumericFieldData) indexFieldData; |
| 162 | + if (indexNumericFieldData.getNumericType().isFloatingPoint()) { |
| 163 | + return new TermsDoubleFacetCollector(facetName, indexNumericFieldData, size, comparatorType, allTerms, context, excluded, searchScript); |
| 164 | + } else { |
| 165 | + return new TermsLongFacetCollector(facetName, indexNumericFieldData, size, comparatorType, allTerms, context, excluded, searchScript); |
| 166 | + } |
| 167 | + } else { |
| 168 | + if (script != null || "map".equals(executionHint)) { |
| 169 | + return new TermsStringFacetCollector(facetName, indexFieldData, size, comparatorType, allTerms, context, excluded, pattern, searchScript); |
| 170 | + } else if (indexFieldData instanceof IndexOrdinalFieldData) { |
| 171 | + return new TermsStringOrdinalsFacetCollector(facetName, (IndexOrdinalFieldData) indexFieldData, size, comparatorType, allTerms, context, excluded, pattern); |
| 172 | + } else { |
| 173 | + return new TermsStringFacetCollector(facetName, indexFieldData, size, comparatorType, allTerms, context, excluded, pattern, searchScript); |
205 | 174 | }
|
206 | 175 | }
|
207 |
| - return new TermsStringFacetCollector(facetName, field, size, comparatorType, allTerms, context, excluded, pattern, scriptLang, script, params); |
208 | 176 | }
|
209 | 177 |
|
210 | 178 | @Override
|
|
0 commit comments