我们在使用搜索服务时候,通常要建立一个索引库来方便搜索和展示,这里常用的就是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);
}