您的位置:首页 > 编程语言 > Java开发

Elasticsearch学习(6)—— Spring Data Elasticsearch

2018-07-08 13:44 519 查看
https://es.yemengying.com/

使用SpringBoot整合Elasticsearch,一般都是使用 SpringData 进行封装的,然后在dao层接口继承ElasticsearchRepository 类,该类实现了很多的方法,比如常用的CRUD方法。

首先,在使用之前,先做好相关的准备。

1. 配置

1.1 Maven的配置

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

<version>1.5.9.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-elasticsearch</artifactId>

<version>1.5.9.RELEASE</version>

</dependency>

1.2 application.properties的配置

spring.data.elasticsearch.repositories.enabled = true

spring.data.elasticsearch.cluster-nodes =127.0.0.1\:9300

【注】9300 是 Java 客户端的端口。9200 是支持 Restful HTTP 的接口。

更多的配置:

spring.data.elasticsearch.cluster-name Elasticsearch 集群名。(默认值: elasticsearch)

spring.data.elasticsearch.cluster-nodes 集群节点地址列表,用逗号分隔。如果没有指定,就启动一个客户端节点。

spring.data.elasticsearch.propertie 用来配置客户端的额外属性。

spring.data.elasticsearch.repositories.enabled 开启 Elasticsearch 仓库。(默认值:true。)

2. 实体类

@Document(indexName = "userindex", type = "user")

public class User implements Serializable{

private static final long serialVersionUID = 1L;

/** 编号 */

private Long id;

/** 姓名 */

private String name;

/** 年龄 */

private Integer age;

/** 描述 */

private String description;

/** 创建时间 */

private String createtm;

// getter和setter 略



【注】使用SpringData的时候,它需要在实体类中设置indexNametype ,如果和传统型数据库比较的话,就相当于。需要注意的是indexNametype都必须是小写!!!

3. dao层

dao层这里就比较简单了,只需继承ElasticsearchRepository类就行了。其中主要的方法就是 save、delete和search。其中save方法相当如insert和update,没有就新增,有就覆盖。delete方法主要就是删除数据以及索引库。至于search就是查询了,包括一些常用的查询,如分页、权重之类的。

public interface UserDao extends ElasticsearchRepository<User, Long>{

}

4. Service层

@Service

public class UserServiceImpl implements UserService {

@Autowired

private UserDao userDao;

@Override

public boolean insert(User user) {

boolean falg=false;

try{

userDao.save(user);

falg=true;

}catch(Exception e){

e.printStackTrace();

}

return falg;

}

@Override

public List<User> search(String searchContent) {

QueryStringQueryBuilder builder = new QueryStringQueryBuilder(searchContent);

System.out.println("查询的语句:"+builder);

Iterable<User> searchResult = userDao.search(builder);

Iterator<User> iterator = searchResult.iterator();

List<User> list=new ArrayList<User>();

while (iterator.hasNext()) {

list.add(iterator.next());

}

return list;

}

@Override

public List<User> searchUser(Integer pageNumber, Integer pageSize,String searchContent) {

// 分页参数

Pageable pageable = new PageRequest(pageNumber, pageSize);

QueryStringQueryBuilder builder = new QueryStringQueryBuilder(searchContent);

SearchQuery searchQuery = new NativeSearchQueryBuilder().withPageable(pageable).withQuery(builder).build();

System.out.println("查询的语句:" + searchQuery.getQuery().toString());

Page<User> searchPageResults = userDao.search(searchQuery);

return searchPageResults.getContent();

}

@Override

public List<User> searchUserByWeight(String searchContent) {

// 根据权重进行查询

FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery()

.add(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("name", searchContent)),

ScoreFunctionBuilders.weightFactorFunction(10))

.add(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("description", searchContent)),

ScoreFunctionBuilders.weightFactorFunction(100)).setMinScore(2);

System.out.println("查询的语句:" + functionScoreQueryBuilder.toString());

Iterable<User> searchResult = userDao.search(functionScoreQueryBuilder);

Iterator<User> iterator = searchResult.iterator();

List<User> list=new ArrayList<User>();

while (iterator.hasNext()) {

list.add(iterator.next());

}

return list;

}

}

之后可以对实现进行测试 。

此外,还可以使用Jest Client调用Elasticsearch 的API。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息