使用spring 的es,有两种方式,一种是node
先说第一种,第一种相对而言功能更复杂,支持聚合,模糊,正则查询。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就行。