- 使用SpringAPI操作ES
- 添加依赖:
- 配置yml:
- 实体类:
- 新建repostory接口类,实现增删改查
- 方法测试
- 自定义搜索方法
- 1.根据规范,定义搜索方法名称即可,不需要实现方法
- 2.添加分页:
- pd项目中添加ES搜索
- 添加依赖
- 配置yml
- 创建实体类
- 创建es
- 创建service
- 创建控制层:
- 高亮显示搜索结果
- 1.修改repository
- 2.service也需要修改List
配置yml:org.springframework.boot spring-boot-starter-data-elasticsearch org.projectlombok lombok
spring:
elasticsearch:
rest:
uris:
- http://192.168.64.181:9200
- http://192.168.64.181:9201
- http://192.168.64.181:9202
实体类:
@document(indexName = "students",shards = 3,replicas = 2)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
@Id //使用学生的学号作为索引id
private Long id;
private String name;
private Character gender;
@Field("birthDate")//es服务器中的字段名,与属性名相同可以省略
private String birthDate;
}
新建repostory接口类,实现增删改查
需要继承ElasticsearchRepository接口
public interface StudentRepository
extends ElasticsearchRepository {
}
方法测试
新增:
- save()
查询方法:
- 1.findById()
- 2.findAll()
删除方法
- deleteById()
@SpringBootTest
public class Test1 {
@Autowired
private StudentRepository repo;
@Test
void test1(){
// 添加或修改数据
repo.save(new Student(9527L,"唐伯虎",'男',"2010-11-26"));
repo.save(new Student(9528L,"唐伯虎1",'男',"2010-11-06"));
repo.save(new Student(9529L,"唐伯虎2",'男',"2010-10-20"));
repo.save(new Student(9530L,"唐伯虎3",'男',"2010-10-16"));
repo.save(new Student(9531L,"唐伯虎4",'男',"2010-08-12"));
repo.save(new Student(9532L,"唐伯虎5",'男',"2010-04-15"));
repo.save(new Student(9533L,"唐伯虎6",'男',"2010-09-16"));
}
@Test
void test2(){
repo.save(new Student(9532L,"如花",'女',"2019-05-03"));
}
@Test
void test3(){
Optional op = repo.findById(9527L);
if (op.isPresent()){//内部的学生对象是否存在
System.out.println(op.get());
}
System.out.println("------------------------------------------");
Iterable all= repo.findAll();
for (Student student :all){
System.out.println(student);
}
}
@Test
void test4(){
repo.deleteById(9533L);
}
}
自定义搜索方法
1.根据规范,定义搜索方法名称即可,不需要实现方法
public interface StudentRepository
extends ElasticsearchRepository {
//在姓名字段中搜索
List findByName(String key);//按照规范,定义抽象方法名称即可
//在姓名中搜索,在出生日期中搜索
List findByNameOrBirthDate(String key,String birthDate);//按照规范,定义抽象方法名称即可
}
测试:
@Test
void test5(){
List s = repo.findByName("伯虎2");
System.out.println(s);
}
@Test
void test6(){
List s2 = repo.findByNameOrBirthDate("4", "2010-10-20");
System.out.println(s2);
}
2.添加分页:
//在姓名中搜索,在出生日期中搜索 // ListfindByNameOrBirthDate(String key,String birthDate);//按照规范,定义抽象方法名称即可 List findByNameOrBirthDate(String key, String birthDate, Pageable pageable);
测试:
@Test//添加分页参数
void test6(){
Pageable pageable = PageRequest.of(1, 2);
List s3 = repo.findByNameOrBirthDate("4", "2010-10-20",pageable);
System.out.println(s3);
}
pd项目中添加ES搜索
添加依赖
配置ymlorg.springframework.boot spring-boot-starter-data-elasticsearch org.projectlombok lombok
spring:
elasticsearch:
rest:
uris:
- http://192.168.64.181:9200
- http://192.168.64.181:9201
- http://192.168.64.181:9202
创建实体类
@document(indexName = "pditems")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Item {
private Long id;
private String title;
@Field("sell_point")//es中的字段名
private String sellPoint;
private String price;
private String image;
}
创建es
public interface ItemRepository
extends ElasticsearchRepository- {
List
- findByTitleOrSellPoint(
String key1, String key2, Pageable pageable);
}
创建service
接口:
public interface SearchService {
List- search(String key, Pageable pageable);
}
实现类:
@Service
public class SearchServiceImpl implements SearchService {
@Autowired
private ItemRepository itemRepository;
@Override
public List- search(String key, Pageable pageable) {
List
- items = itemRepository.findByTitleOrSellPoint(key, key, pageable);
return items;
}
}
创建控制层:
@Controller
public class SearchController {
@Autowired
private SearchService searchService;
@GetMapping("/search/toSearch.html")//?key=手机&page=3&size=20
public String search(String key, Pageable pageable, Model model){ //model向jsp中传递对象
List- list = searchService.search(key, pageable);
model.addAttribute("list",list);
model.addAttribute("page",pageable);
return "/search.jsp";
}
}
高亮显示搜索结果
1.修改repository
public interface ItemRepository
extends ElasticsearchRepository- {
@Highlight(
parameters = @HighlightParameters(
preTags = "",
postTags = ""
),
fields = {
@HighlightField(name = "title")
}
)
List
> findByTitleOrSellPoint(
String key1, String key2, Pageable pageable);
}
修改位置,注意导包:
@Controller
public class SearchController {
@Autowired
private SearchService searchService;
@GetMapping("/search/toSearch.html")//?key=手机&page=3&size=20
public String search(String key, Pageable pageable, Model model){ //model向jsp中传递对象
List> searchHits= searchService.search(key, pageable);
//创建List- ,把searchHits集合的结果,处理成List
- 集合
ArrayList



