SpringDataelasticsearch 学习文档
主要基于Spring Data Elasticsearch 4.0版本
首先导入最新的包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
spring:
elasticsearch:
rest:
uris: http://127.0.0.1:9200
简单的yml配置这就ok了接下来就准备写我们常写的那些步骤了
实体对应主要配置entity
例子:
package cn.sys.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.elasticsearch.common.geo.GeoPoint;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Data
@ToString
//这个indexname是我自定义的配置类,这个可以自己写成对应的比如aaa的
@Document(indexName = "#{EsConfig.event}", shards = 5, replicas = 1, createIndex = false)
public class Event extends BaseEntity{
@Id
private String id;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String name;
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss")
private String date;
@Field(type = FieldType.Keyword)
private String locations;
@GeoPointField
private GeoPoint lonlat;
@Field(type = FieldType.Keyword)
private String sources;
@Field(type = FieldType.Keyword)
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
private List<String> targets;
}
@Document类级别主要配置elasticsearch索引库映射对象主要配置内容:
属性定义@Field表示字段属性的,@Id就是数据的唯一标志
@Field中name表示字段在elasticsearch中的字段名
意思就是es中可以a的字段可以映射到b上面很好理解
type表示字段的类型(Text, Keyword, Long, Integer, Short, Byte, Double, Float, Half_Float, Scaled_Float, Date, Date_Nanos, Boolean等等。。。这个可以自己查阅官网)
format表示对日期的格式化
store表示是否将字段记录到es中,这个没用过
analyzer定义查询所用的分词器
属性上@GeoPoint表示地理位置类型为GeoPoint
类似于dao层的用法继承ElasticsearchRepository可以进行查询
es提供的默认查询很强大基本不用自己写
findByTargetsOrderByDateDesc比如这个用Targets查询所有然后在以date按时间排序
以简单的驼峰命名来查询你所需要的数据
详细的请查看官网
package cn.sys.dao;
import cn.sys.entity.Event;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface IEventDao extends ElasticsearchRepository<Event,String> {
/**
* 通过targetId查询所有事件按时间排序
* @param targetId
* @return
*/
List<Event> findByTargetsOrderByDateDesc(String targetId);
}
当然你自己想写语句进行查询也是没问题的例如
@Query("{ \"bool\": {\"must\": [{ \"match\": { \"events.name\": \"?0\"}},{ \"bool\": { \"must_not\": [ { \"terms\": { \"status\": [ \"?1\" ]}} ] }}]}}")
Page<Article> findAllByEvents(String name,String status,Pageable pageable);
这个类似于jpa的方式取执行语句;查询出索引实体。
官网地址:官网传送
懒得写了下次再说
未完待续