18°

spring data elasticsearch 使用

使用spring 的es,有两种方式,一种是

  1. ElasticsearchTemplate
  2. BetGameElasticsearchRepository

先说第一种,第一种相对而言功能更复杂,支持聚合,模糊,正则查询。

1. 引入maven的依赖,这里注意你安装的elasticsearch的服务器版本与spring data elasticsearch 版本的对照关系。

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>1.3.6.RELEASE</version>
        </dependency>

2. 在spring启动加载的xml配置bean。

    <!--es连接配置-->
    <elasticsearch:transport-client id="es_client"
                                    cluster-name="elasticsearch_jcobsns_daily"
                                    cluster-nodes="192.168.69.238:9300,192.168.69.239:9300"/>
    <!--es template-->
    <bean name="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
        <constructor-arg name="client" ref="es_client"/>
    </bean>

3. 编写存储数据的对象 (构造函数必须保留一个无参的)

@Document(indexName = "my_test",type = "ppp")
public class ESDomain {
    @Id
    private Long id ;
    @Field
    private Integer age ;
    @Field(type = FieldType.String,index = FieldIndex.analyzed)
    private String author ;
    @Field(type = FieldType.String ,index = FieldIndex.analyzed)
    private String views ;
public ESDomain() {
}

public ESDomain(Long id, Integer age, String author, String views) {
    this.id = id;
    this.age = age;
    this.author = author;
    this.views = views;
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public Integer getAge() {
    return age;
}

public void setAge(Integer age) {
    this.age = age;
}

public String getAuthor() {
    return author;
}

public void setAuthor(String author) {
    this.author = author;
}

public String getViews() {
    return views;
}

public void setViews(String views) {
    this.views = views;
}

}

1. @Document 作用在类,标记实体类为文档对象,一般有两个属性

   indexName:对应索引库名称,type:对应在索引库中的类型,shards:分片数量,默认5,replicas:副本数量,默认1

2. @Id 作用在成员变量,标记一个字段作为id主键

3. @Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:

  type:字段类型,取值是枚举:FieldType,index:是否索引,布尔类型,默认是true,store:是否存储,布尔类型,默认是false,analyzer:分词器名称

4. 存储一个对象,并建立该对象索引

elasticsearchTemplate.index(indexQuery);

5. 批量存储多个对象

 elasticsearchTemplate.bulkIndex(queries);

6. 查询

查询需要传一个 SearchQuery 的对象。该对象构造方法如下:

NativeSearchQuery query = new NativeSearchQueryBuilder()
                .withIndices("my_test2")//index
                .withTypes("ppp2")//type
                .withQuery(boolQuery)//查询条件
                .withSort(SortBuilders.fieldSort("age").order(SortOrder.DESC))//排序
                .withPageable(new PageRequest(0, 200))//分页
                .build();

查询条件需要实现QueryBuilder接口:

一般由这个工具类创建:QueryBuilders ,常用的有:

QueryBuilders.boolQuery() ;//判断条件查询,可以组合多条件。类似mysql的where 
QueryBuilders.matchPhraseQuery() ;//匹配查询
QueryBuilders.regexpQuery() ;//正则查询
QueryBuilders.wildcardQuery() ;//支持* ?的匹配查询

 

使用ElasticsearchRepository方式:继承类ElasticsearchRepository

public interface ESDomainElasticsearchRepository extends ElasticsearchRepository<ESDomain , Long> {

}

在spring.xml 中配置加载

<elasticsearch:repositories base-package="com.my.es.manager"/>

 CURD直接调ESDomainElasticsearchRepository对应的save,update,find就行。

 

 

 

 

本文由【最爱肉肉】发布于开源中国,原文链接:https://my.oschina.net/lmxy1990/blog/3157846

全部评论: 0

    我有话说: