| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package org.es.mapping.mapper;
- import org.apache.commons.lang.StringUtils;
- import org.elasticsearch.common.xcontent.XContentBuilder;
- import org.es.mapping.annotations.fieldtype.CompletionContext;
- import org.es.mapping.annotations.fieldtype.CompletionField;
- import org.es.mapping.utils.BeanUtils;
- import java.io.IOException;
- import java.lang.reflect.Field;
- public class CompletionFieldMapper {
- public static boolean isValidCompletionFieldType(Field field) {
- if (BeanUtils.isCollectionType(field)) {
- if (!BeanUtils.isValidCollectionType(field)) {
- throw new IllegalArgumentException(
- String.format("Unsupported list class type, name[%s].", field.getName()));
- }
- Class genericTypeClass = (Class) BeanUtils.getCollectionGenericType(field);
- return String.class.isAssignableFrom(genericTypeClass) && field.isAnnotationPresent(CompletionField.class);
- }
- Class<?> fieldClass = field.getType();
- return (String.class == fieldClass) && field.isAnnotationPresent(CompletionField.class);
- }
- public static void mapDataType(XContentBuilder mappingBuilder, CompletionField completionField) throws IOException {
- mappingBuilder.field("type", "completion");
- if (!"simple".equalsIgnoreCase(completionField.analyzer())) {
- mappingBuilder.field("analyzer", completionField.analyzer());
- }
- if (!"simple".equalsIgnoreCase(completionField.search_analyzer())) {
- mappingBuilder.field("search_analyzer", completionField.search_analyzer());
- }
- if (!completionField.preserve_separators()) {
- mappingBuilder.field("preserve_separators", completionField.preserve_separators());
- }
- if (!completionField.preserve_position_increments()) {
- mappingBuilder.field("preserve_position_increments", completionField.preserve_position_increments());
- }
- if (completionField.max_input_length() != 50) {
- mappingBuilder.field("max_input_length", completionField.max_input_length());
- }
- if (completionField.contexts().length > 0) {
- mappingBuilder.startArray("contexts");
- for (CompletionContext completionContext : completionField.contexts()) {
- mappingBuilder.field("name", completionContext.name());
- mappingBuilder.field("type", completionContext.type());
- if (StringUtils.isNotBlank(completionContext.path())) {
- mappingBuilder.field("path", completionContext.path());
- }
- }
- mappingBuilder.endArray();
- }
- }
- public static void mapDataType(XContentBuilder mappingBuilder, Field field) throws IOException {
- if (!isValidCompletionFieldType(field)) {
- throw new IllegalArgumentException(
- String.format("field type[%s] is invalid type of string.", field.getType()));
- }
- CompletionField completionField = field.getDeclaredAnnotation(CompletionField.class);
- mapDataType(mappingBuilder, completionField);
- }
- }
|