spring‐data‐elasticsearch里POJO中注解的@Document @Field 解析

2022-05-13 11:07:28 浏览数 (1)

我们在使用搜索服务时候,通常要建立一个索引库来方便搜索和展示,这里常用的就是ElasticSearch,ElasticSearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。

spring‐data‐elasticsearch的使用时候需要注意的点

主要体现在pojo实体中

一真正开发中,我们通常要在实体类上注明@Document
代码语言:javascript复制
@Document(indexName = "zyh_article",type = "article")

@Document注解标明实体是elasticsearch种的Document,其属性可以标明属于的索引和类型----对应数据库中的数据库名和表名,其中type不预先创建也可以,没预先创建的它会自动创建一个与实体相匹配的type

代码语言:javascript复制
Douument注解源码查看
@Persistent
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Document {
    String indexName();//索引库的名称,建议以项目的名称命名

    String type() default "";//类型,建议以实体的名称命名-索引库的type

    boolean useServerConfiguration() default false;

    short shards() default 5;//默认分区数

    short replicas() default 1; //每个分区默认的备份数

    String refreshInterval() default "1s";//索引文件存储类型

    String indexStoreType() default "fs";

    boolean createIndex() default true;
}
二 实体类中除了类上的@Document注解,我们还要在记录中加@Field注解
代码语言:javascript复制
@Field 源码分析,查看其内部值

public @interface Field {
 
FieldType type() default FieldType.Auto; //自动检测属性的类型,可以根据实际情况自己设置
 
FieldIndex index() default FieldIndex.analyzed; //是否分词,默认情况下分词,一般默认分词就好,除非这个字段你确定查询时不会用到
 
DateFormat format() default DateFormat.none; //时间类型的格式化
 
String pattern() default ""; 
 
boolean store() default false; //默认情况下不存储原文

String analyzer() default ""; //指定字段建立索引分词时指定的分词器
 //比如对索引库中的中国人进行分词
String searchAnalyzer() default ""; //指定字段被搜索时使用的分词器
  //比如输入框中写中国人,然后服务器对输入框中的中国人进行分词
String[] ignoreFields() default {}; //如果某个字段需要被忽略
 
boolean includeInParent() default false;
}

与前端交互我们仍可以使用REST风格结合SpringMVC 后端数据库,我们可以使用spring-data-elasticsearch

代码语言:javascript复制
pom
<dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>3.0.7.RELEASE</version>
        </dependency>
代码语言:javascript复制
public interface ArticleSearchDao extends ElasticsearchRepository<Article,String> {
    public Page<Article> findByContentOrTitleLike(String content, String title, Pageable pageable);
}

0 人点赞