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

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

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

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

下面是使用示例:

 @Document(type = "book", _timestamp = true, _ttl = @TTL(enabled = true, _default = "5m"))
public class Book {
/*ID,只能是Long或者String类型*/
@Id
private Long id; /*数值类型*/
@Field(type = FieldType.Double, ignoreMalformed = true)
private Double price; /*数值类型*/
@Field(type = FieldType.Integer)
private Integer pageCount; /*未分词String型*/
@Field(type = FieldType.String, index = FieldIndex.not_analyzed)
private String isnNo; /*bool型*/
@Field(type = FieldType.Boolean, nullValue = "false")
private Boolean isValid; /*日期类型*/
@Field(type = FieldType.Date, format = DateFormat.basic_time_no_millis)
private Date publishDate; /*分词String类型,并设置fielddata加载限制(当然也可不设置用默认)*/
@Field(
type = FieldType.String,
index = FieldIndex.analyzed,
analyzer = "ik_max_word",
searchAnalyzer = "ik_smart",
termVector = TermVector.with_positions_offsets,
fielddata = @Fielddata(
format = FielddataFormat.paged_bytes,
frequency = @FielddataFrequencyFilter(
enable = true,
min = 0.001,
max = 1.2,
minSegmentSize = 500
),
loading = FielddataLoading.eager_global_ordinals
) )
private String author; /*multi field 类型(用于多字段搜索)*/
@MultiField(
mainField = @Field(type = FieldType.String, index = FieldIndex.analyzed, analyzer = "ik_max_word", searchAnalyzer = "ik_smart"),
otherFields = {
@MultiNestedField(dotSuffix = "pinyin", nestedField = @Field(
type = FieldType.String,
index = FieldIndex.analyzed,
analyzer = "lc_index",
searchAnalyzer = "lc_search")
),
@MultiNestedField(dotSuffix = "english", nestedField = @Field(
type = FieldType.String,
index = FieldIndex.analyzed,
analyzer = "standard")
)
}
)
private String title; /*Completion Context Suggester配置(如果不配置CompletionContext则是Completion Suggester)*/
@CompletionField(analyzer = "ik", payloads = true, context = {
@CompletionContext(name = "bookType", type = CompletionContextType.category, defaultVal = {"algorithm"}),
@CompletionContext(name = "bookColor", type = CompletionContextType.category, defaultVal = {"red"})
})
private String suggestContextField; /*二进制类型*/
@Field(type = FieldType.Binary)
private byte[] pdf; /*内嵌类型*/
@NestedObject(clazz = SalesArea.class)
private SalesArea salesArea; }

[Reference]

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

Elasticsearch-mapper 基于注解方式生成mapping(2.0以上)的更多相关文章

  1. Spring boot 基于注解方式配置datasource

    Spring boot 基于注解方式配置datasource 编辑 ​ Xml配置 我们先来回顾下,使用xml配置数据源. 步骤: 先加载数据库相关配置文件; 配置数据源; 配置sqlSessionF ...

  2. Shiro入门之二 --------基于注解方式的权限控制与Ehcache缓存

    一  基于注解方式的权限控制 首先, 在spring配置文件applicationContext.xml中配置自动代理和切面 <!-- 8配置自动代理 -->    <bean cl ...

  3. SpringMVC入门(基于注解方式实现)

    ---------------------siwuxie095                             SpringMVC 入门(基于注解方式实现)         SpringMVC ...

  4. Spring声明式事务管理(基于注解方式实现)

    ----------------------siwuxie095                                 Spring 声明式事务管理(基于注解方式实现)         以转 ...

  5. Hibernate基于注解方式的各种映射全面总结

    1. 使用Hibernate Annotation来做对象关系映射 1) 添加必须包: hibernate-jpa-2.0-api-1.0.0.Final.jar 2) 在实体类中添加JPA的标准注解 ...

  6. Spring中基于注解方式管理bean

    操作步骤 第一步:导入相关jar包 spring IoC的基本包 Spring支持注解的Jar包 第二步:创建Spring配置文件,ApplicationContext.xml 引入约束和开启注解扫描 ...

  7. Hibernate基于注解方式配置来实现实体和数据库之间存在某种映射关系

    实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取.在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义. 本文以java注解的形式总结映射关 ...

  8. 基于注解方式@AspectJ的AOP

    启用对@AspectJ的支持 Spring默认不支持@AspectJ风格的切面声明,为了支持需要使用如下配置: <aop:aspectj-autoproxy/> 这样Spring就能发现@ ...

  9. hibernate 用注解方式生成uuid方法

    //配置uuid,本来jpa是不支持uuid的,但借用hibernate的方法可以实现. @GeneratedValue(generator = "uuid") @Generate ...

随机推荐

  1. IT部门的“2/8”现状

    专家的研究和大量企业实践表明,在IT项目的生命周期中,大约80%的时间与IT项目运 营维护有关,而该阶段的投资仅占整个IT投资的20%,形成了典型的“技术高消费”.“轻服务.重技术”现象.Gartne ...

  2. Java时间日期字符串格式转换大全

    import java.text.*; import java.util.Calendar; public class VeDate { /** * 获取现在时间 * * @return 返回时间类型 ...

  3. mysql 连接字符串 CONCAT

    以前用SQL Server 连接字符串是用“+”,现在数据库用mysql,写个累加两个字段值SQL语句居然不支持"+",郁闷了半天在网上查下,才知道mysql里的+是数字相加的操作 ...

  4. swagger的说明、配置及使用

    一.What is swagger? 官方介绍:Swagger是一个规范且完整的框架,提供描述.生产.消费和可视化RESTful Web Service.专业角度:Swagger是由庞大工具集合支撑的 ...

  5. 8 -- 深入使用Spring -- 2...1 搜索Bean类

    8.2.1 搜索Bean类 既然不再使用Spring配置文件来配置任何Bean实例,那么只能希望Spring会自动搜索某些路径下的Java类,并将这些Java类注册成Bean实例. tips:Rail ...

  6. 7 -- Spring的基本用法 -- 11... 基于XML Schema的简化配置方式

    7.11 基于XML Schema的简化配置方式 Spring允许使用基于XML Schema的配置方式来简化Spring配置文件. 7.11.1 使用p:命名空间简化配置 p:命名空间不需要特定的S ...

  7. headless webkit(无界面浏览器、爬虫)

    phantomjs / puppeteer https://github.com/amir20/phantomjs-node https://github.com/GoogleChrome/puppe ...

  8. fork(), waitpid()

    NAME fork - create a child process SYNOPSIS #include <unistd.h> pid_t fork(void); RETURN VALUE ...

  9. Splash runjs() 方法

    runjs() 方法可以执行 JavaScript 代码,它与 evaljs() 功能类似,但是更偏向于执行某些动作或声明某些方法 function main(splash, args) splash ...

  10. 使用 urllib 进行身份验证

    如下图,有些网站需要使用用户名密码才可以登录,我们可以使用 HTTPBasicAuthHandler() 来实现 from urllib.request import HTTPPasswordMgrW ...