ES在Java中基础配置
1. 启动
- elasticsearch启动 ,在bin包下启动elasticsearch.bat
- Kibana启动,在bin包下启动kibana.bat,然后访问localhost:5601
2.pom配置
- spring-boot-start-data-elasticsearch
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
</dependency>
3.application.yml文件配置
spring:
data:
elasticsearch: #ElasticsearchProperties
cluster-name: #默认即为elasticsearch
cluster-node: #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
4.实体类
- 注解:
- @Document (indexName=“article_index”,type=“article”,shards=5,replicas=1,indexStoreType=“fs”,refreshInterval="-1")
- 在需要建立索引的类上加上@Document注解,即表明这个实体中属性需要进行索引,并且分词
String indexName();//索引库的名称,个人建议以项目的名称命名
String type() default "";//类型,个人建议以实体的名称命名
short shards() default 5;//默认分区数
short replicas() default 1;//每个分区默认的备份数
String refreshInterval() default "1s";//刷新间隔
String indexStoreType() default "fs";//索引文件存储类型
- @Id 标明主键
5.创建Repository
- //泛型的参数分别是实体类型和主键类型
public interface TRepository extends ElasticsearchRepository<T, Long>{
}
6.编写Service层及Controller层
- Service层基础管理 示例 :
@Autowired
private IBookRepository bookRepository;
//查询所有数据
@Override
public List<Book> queryAll(){
Iterable<Book> all = bookRepository.findAll();
Iterator<Book> iterator = all.iterator();
List<Book> books = new ArrayList<>();
while(iterator.hasNext()){
books.add(iterator.next());
}
return books;
}
//新增一条数据
@Override
public Book addOne(Book book){
return bookRepository.save(book);
}
//通过id查询数据
@Override
public Book getOne(Long id){
Optional<Book> byId = bookRepository.findById(id);
return byId.get();
}
// 删除
@Override
public void delete(Long id){
bookRepository.deleteById(id);
}
// 更新
@Override
public Book update(Book book) {
Book save = bookRepository.save(book);
return save;
}
- Service层分页查询 示例:
public Page<User> getUsers() {
//创建builder
BoolQueryBuilder builder = QueryBuilders.boolQuery();
//.boolQuery()下有must、should以及mustNot 相当于sql中的and、or以及not
//设置模糊搜索,真实姓名中包含金的用户
builder.must(QueryBuilders.fuzzyQuery("realname", "金"));
//设置用户名为king
builder.must(new QueryStringQueryBuilder("king").field("username"));
//排序
FieldSortBuilder sort = SortBuilders.fieldSort("age").order(SortOrder.DESC);
//设置分页
//====注意!es的分页和Hibernate一样api是从第0页开始的=========
PageRequest page = new PageRequest(0, 2);
//构建查询
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//将搜索条件设置到构建中
nativeSearchQueryBuilder.withQuery(builder);
//将分页设置到构建中
nativeSearchQueryBuilder.withPageable(page);
//将排序设置到构建中
nativeSearchQueryBuilder.withSort(sort);
//生产NativeSearchQuery
NativeSearchQuery query = nativeSearchQueryBuilder.build();
//执行,返回包装结果的分页
Page<User> resutlList = userRepository.search(query);
return resutlList;
}
7.注意事项
ES中API的端口号是9300而不是9200
ES系统中Elasticsearch.yml配置文件中要加入network.host: 0.0.0.0,否则外网地址访问不了
最新的资料一定在官网上面查看,官网地址:https://www.elastic.co
注意JDK、ES、Springboot三者之间的版本,很多时候错误都是版本冲突引起的
版权声明:本文为weixin_44008460原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。