/** * Returns an array datatype, where the array elements are of the given type * * @param type the type to create an array of * @return the array data type */ public static ArrayDataType getArray(DataType type) { return new ArrayDataType(type); }
private static void registerArrayType(DocumentTypeManager manager, int id, DocumentmanagerConfig.Datatype.Arraytype array) { DataType nestedType = manager.getDataType(array.datatype(), ""); ArrayDataType type = new ArrayDataType(nestedType, id); manager.register(type); }
@Override public void onPrimitive(FieldValue fv) { if (retVal != null) { if (multiValue) { ((Array) retVal).add(fv); } else { Array afv = new Array(new ArrayDataType(retVal.getDataType())); afv.add(retVal); afv.add(fv); retVal = afv; multiValue = true; } } else { retVal = fv; } } }
private void processField(Search search, SDField uriField) { String uriName = uriField.getName(); uriField.setStemming(Stemming.NONE); DataType generatedType = DataType.STRING; if (uriField.getDataType() instanceof ArrayDataType) { generatedType = new ArrayDataType(DataType.STRING); } else if (uriField.getDataType() instanceof WeightedSetDataType) { WeightedSetDataType wdt = (WeightedSetDataType) uriField.getDataType(); generatedType = new WeightedSetDataType(DataType.STRING, wdt.createIfNonExistent(), wdt.removeIfZero()); } for (String suffix : URL_SUFFIX) { String partName = uriName + "." + suffix; // I wonder if this is explicit in qrs or implicit in backend? // search.addFieldSetItem(uriName, partName); SDField partField = new SDField(partName, generatedType, true); partField.setIndexStructureField(uriField.doesIndexing()); partField.setRankType(uriField.getRankType()); partField.setStemming(Stemming.NONE); partField.getNormalizing().inferLowercase(); if (uriField.getIndex(suffix) != null) { partField.addIndex(uriField.getIndex(suffix)); } search.addExtraField(partField); search.fieldSets().addBuiltInFieldSetItem(BuiltInFieldSets.INTERNAL_FIELDSET_NAME, partField.getName()); } }