一:配置
springboot 2.0.4
elasticsearch 5.6.9
spring-boot-starter-data-elasticsearch 2.1.9
这里说明一下 spring data es的版本需要和es的版本对应,具体可以自行百度对应版本
二:Maven依赖
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.stramt.es</groupId>
<artifactId>es_demo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--spring data es starter-->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.1.9.RELEASE</version>
</dependency>
<!--<dependency>-->
<!--<groupId>org.springframework.data</groupId>-->
<!--<artifactId>spring-data-elasticsearch</artifactId>-->
<!--<version>3.1.2.RELEASE</version>-->
<!--</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
三:配置文件
application.yml
data:
elasticsearch:
cluster-name: my-application #默认为elasticsearch
cluster-nodes: 172.22.137.17:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode(9200端口是http查询使用的。9300集群使用。这里使用9300.)
四:使用
@Document
使用在实体对象上的 类似于MySQL的@Table,@Document中属性:
indexName----->dbName
type--------------->tableName
@Id
主键
@Field
加上@Document注解后,默认这个实体的所有属性都会被建立索引、并且分词,但是有时候我们需要一些自定义,这时候就可以使用@Field注解
@Field注解的定义如下:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
@Inherited
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 searchAnalyzer() default "";#指定字段搜索时使用的分词器
String indexAnalyzer() default "";#指定字段建立索引时指定的分词器
String[] ignoreFields() default {};#如果某个字段需要被忽略
boolean includeInParent() default false;
}
ElasticsearchRepository

Service
public interface CommodityService {
long count();
Country save(Country country);
void delete(Country country);
Iterable<Country> getAll();
List<Country> getByName(String name);
Page<Country> pageQuery(Integer pageNo,Integer pageSize,String kw);
}
Impl
@Service
public class CommodityServiceImpl implements CommodityService {
@Autowired
CommodityReposity commodityReposity;
@Override
public long count() {
return commodityReposity.count();
}
@Override
public Country save(Country country) {
return commodityReposity.save(country);
}
@Override
public void delete(Country country) {
commodityReposity.delete(country);
}
@Override
public Iterable<Country> getAll() {
return commodityReposity.findAll();
}
@Override
public List<Country> getByName(String name) {
List<Country> list = new ArrayList<>();
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("name",name);
Iterable<Country> search = commodityReposity.search(matchQueryBuilder);
search.forEach(e->list.add(e));
return list;
}
@Override
public Page<Country> pageQuery(Integer pageNo, Integer pageSize, String kw) {
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchPhraseQuery("name",kw))
.withPageable(PageRequest.of(pageNo,pageSize))
.build();
return commodityReposity.search(searchQuery);
}
}
Page的方法:
getTotalElements() 匹配的总共有多少条数据
getTotalPages() 匹配的总共有多少页
getSize() 用户想在当前页获取的数量
getNumberOfElements() 当前页实际获取的数量
getPageable().getPageSize() 当前页获取的数量
getPageable().getPageNumber() 当前是多少页(从0开始,使用的时候需要+1)
下一章介绍 官方推荐客户端的方式 Java High Level REST Client API
网友评论