spring data elasticsearch 使用

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

  1. ElasticsearchTemplate
  2. BetGameElasticsearchRepository

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

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

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

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

<!--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 做用在类,标记实体类为文档对象,通常有两个属性elasticsearch

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

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

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

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

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就行。

相关文章
相关标签/搜索