栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

操作ElasticSearch--项目中添加ES搜索

操作ElasticSearch--项目中添加ES搜索

文章目录
    • 使用SpringAPI操作ES
      • 添加依赖:
      • 配置yml:
      • 实体类:
      • 新建repostory接口类,实现增删改查
      • 方法测试
    • 自定义搜索方法
      • 1.根据规范,定义搜索方法名称即可,不需要实现方法
      • 2.添加分页:
    • pd项目中添加ES搜索
      • 添加依赖
      • 配置yml
      • 创建实体类
      • 创建es
      • 创建service
      • 创建控制层:
    • 高亮显示搜索结果
      • 1.修改repository
      • 2.service也需要修改List

使用SpringAPI操作ES 添加依赖:
		
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
        

		
            org.projectlombok
            lombok
        
配置yml:
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.添加分页:
    //在姓名中搜索,在出生日期中搜索
//    List findByNameOrBirthDate(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搜索 添加依赖
		
			org.springframework.boot
			spring-boot-starter-data-elasticsearch
		
		
			org.projectlombok
			lombok
		
配置yml
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);
}

修改位置,注意导包:

2.service也需要修改List 3.修改Controller
@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 list = new ArrayList<>();
        for (SearchHit sh:searchHits){
            List hlTitle = sh.getHighlightField("title");
            Item item = sh.getContent();
            item.setTitle(pinJie(hlTitle));
            list.add(item);
        }
        model.addAttribute("list",list);
        model.addAttribute("page",pageable);
        return "/search.jsp";
    }
	//格式拼接
    private String pinJie(List hlTitle) {
        StringBuilder sb = new StringBuilder();
        for (String s : hlTitle){
            sb.append(s);
        }
        return sb.toString();
    }
}



转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号