IPFieldMapper.java 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package org.es.mapping.mapper;
  2. import org.apache.commons.lang.StringUtils;
  3. import org.elasticsearch.common.xcontent.XContentBuilder;
  4. import org.es.mapping.annotations.fieldtype.IPField;
  5. import java.io.IOException;
  6. import java.lang.reflect.Field;
  7. public class IPFieldMapper {
  8. public static boolean isValidIPFieldType(Field field) {
  9. Class<?> fieldClass = field.getType();
  10. return String.class.isAssignableFrom(fieldClass) && field.isAnnotationPresent(IPField.class);
  11. }
  12. public static void mapDataType(XContentBuilder mappingBuilder, IPField ipField) throws IOException {
  13. mappingBuilder.field("type", "ip");
  14. if (ipField.boost() != 1.0f) {
  15. mappingBuilder.field("boost", ipField.boost());
  16. }
  17. if (!ipField.doc_values()) {
  18. mappingBuilder.field("doc_values", ipField.doc_values());
  19. }
  20. if (!ipField.include_in_all()) {
  21. mappingBuilder.field("include_in_all", ipField.include_in_all());
  22. }
  23. else if (!ipField.index()) {
  24. mappingBuilder.field("include_in_all", false);
  25. }
  26. if (!ipField.index()) {
  27. mappingBuilder.field("index", ipField.index());
  28. }
  29. if (StringUtils.isNotBlank(ipField.null_value())) {
  30. mappingBuilder.field("null_value", ipField.null_value());
  31. }
  32. if (ipField.store()) {
  33. mappingBuilder.field("store", ipField.store());
  34. }
  35. }
  36. public static void mapDataType(XContentBuilder mappingBuilder, Field field) throws IOException {
  37. if (!isValidIPFieldType(field)) {
  38. throw new IllegalArgumentException(
  39. String.format("field type[%s] is invalid type of ip.", field.getType()));
  40. }
  41. IPField ipField = field.getDeclaredAnnotation(IPField.class);
  42. mapDataType(mappingBuilder, ipField);
  43. }
  44. }