zoukankan      html  css  js  c++  java
  • Elasticsearch-mapper 基于注解方式生成mapping(2.0以上)

    Elasticsearch生成mapping的方式上有多种方式,我们可以把mapping做成配置文件,也可以用spring-data-elasticsearch基于注解生成。

    在基于注解生成这种方式上spring-data的注解还是不错的,但是如果想深度定制化一些参数spring-data却是不支持的,比如针对分词的string类型字段的fielddata加载设置。

    又如果项目中不想引入spring但又想使用基于注解方式生成mapping,这时spring-data就不行了,这里有另一种选择:elasticsearch-mapper。

    elasticsearch-mapper支持绝大部分数据类型和相关参数的设置,使用是请参考官网对各种数据类型和相关参数:ES2.x官网mapping设置

    下面是使用示例:

     1 @Document(type = "book", _timestamp = true, _ttl = @TTL(enabled = true, _default = "5m"))  
     2 public class Book {  
     3     /*ID,只能是Long或者String类型*/  
     4     @Id  
     5     private Long id;  
     6   
     7     /*数值类型*/  
     8     @Field(type = FieldType.Double, ignoreMalformed = true)  
     9     private Double price;  
    10   
    11     /*数值类型*/  
    12     @Field(type = FieldType.Integer)  
    13     private Integer pageCount;  
    14   
    15     /*未分词String型*/  
    16     @Field(type = FieldType.String, index = FieldIndex.not_analyzed)  
    17     private String isnNo;  
    18   
    19     /*bool型*/  
    20     @Field(type = FieldType.Boolean, nullValue = "false")  
    21     private Boolean isValid;  
    22   
    23     /*日期类型*/  
    24     @Field(type = FieldType.Date, format = DateFormat.basic_time_no_millis)  
    25     private Date publishDate;  
    26   
    27     /*分词String类型,并设置fielddata加载限制(当然也可不设置用默认)*/  
    28     @Field(  
    29             type = FieldType.String,  
    30             index = FieldIndex.analyzed,  
    31             analyzer = "ik_max_word",  
    32             searchAnalyzer = "ik_smart",  
    33             termVector = TermVector.with_positions_offsets,  
    34             fielddata = @Fielddata(  
    35                     format = FielddataFormat.paged_bytes,  
    36                     frequency = @FielddataFrequencyFilter(  
    37                             enable = true,  
    38                             min = 0.001,  
    39                             max = 1.2,  
    40                             minSegmentSize = 500  
    41                     ),  
    42                     loading = FielddataLoading.eager_global_ordinals  
    43             )  
    44   
    45     )  
    46     private String author;  
    47   
    48     /*multi field 类型(用于多字段搜索)*/  
    49     @MultiField(  
    50             mainField = @Field(type = FieldType.String, index = FieldIndex.analyzed, analyzer = "ik_max_word", searchAnalyzer = "ik_smart"),  
    51             otherFields = {  
    52                     @MultiNestedField(dotSuffix = "pinyin", nestedField = @Field(  
    53                             type = FieldType.String,  
    54                             index = FieldIndex.analyzed,  
    55                             analyzer = "lc_index",  
    56                             searchAnalyzer = "lc_search")  
    57                     ),  
    58                     @MultiNestedField(dotSuffix = "english", nestedField = @Field(  
    59                             type = FieldType.String,  
    60                             index = FieldIndex.analyzed,  
    61                             analyzer = "standard")  
    62                     )  
    63             }  
    64     )  
    65     private String title;  
    66   
    67     /*Completion Context Suggester配置(如果不配置CompletionContext则是Completion Suggester)*/  
    68     @CompletionField(analyzer = "ik", payloads = true, context = {  
    69             @CompletionContext(name = "bookType", type = CompletionContextType.category, defaultVal = {"algorithm"}),  
    70             @CompletionContext(name = "bookColor", type = CompletionContextType.category, defaultVal = {"red"})  
    71     })  
    72     private String suggestContextField;  
    73   
    74     /*二进制类型*/  
    75     @Field(type = FieldType.Binary)  
    76     private byte[] pdf;  
    77   
    78     /*内嵌类型*/  
    79     @NestedObject(clazz = SalesArea.class)  
    80     private SalesArea salesArea;  
    81       
    82 }

    [Reference]

    [1] http://blog.csdn.net/chennanymy/article/details/52663589

  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/hoojjack/p/8196193.html
Copyright © 2011-2022 走看看