Springboot 2.3.7.RELEASE
application.yml
spring: application: name: es-application elasticsearch: rest: uris: http://localhost:9200
pojo
package com.example.estest03.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; @Data @NoArgsConstructor @AllArgsConstructor @Document(indexName = "users") public class User { @Id private Integer id; @Field(type = FieldType.Keyword) private String name; @Field(type = FieldType.Integer) private Integer age; @Field(type = FieldType.Double) private Double height; }
interface
package com.example.estest03.dao; import com.example.estest03.pojo.User; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import java.util.List; public interface UserRepository extends ElasticsearchRepository<User, Integer> { /** * 根据name查询 * @param name * @return */ List<User> findByName(String name); /** * 根据age查询 * @param age * @return */ List<User> findByAge(Integer age); /** * 根据height查询 * @param height * @return */ List<User> findByHeight(Double height); /** * 根据name和aga查询 * @param name * @param age * @return */ List<User> findByNameAndAge(String name, Integer age); /** * 分页查询,需要指定Pageable参数 * 这里name可以有多个,或关系 * @param pageable * @param names * @return */ List<User> findByNameIn(Pageable pageable, String...names); }
service
package com.example.estest03.service; import com.example.estest03.pojo.User; import org.springframework.data.domain.Pageable; import java.util.Iterator; import java.util.List; public interface IElasticService { /** * 向索引中添加一个Document * @return */ User saveDoc(User user); /** * 向索引中添加多个Document * @return */ Iterable<User> saveDocAll(List<User> users); /** * 根据ID删除Doc * @return */ void deletDoc(Integer id); /** * 查询所有Doc * @return */ Iterator<User> FinAll(); /** * 根据ID查询Doc * @return */ User FinByID(Integer id); /** * 查询所有Doc后根据字段排序--升序 * @return */ Iterable<User> FindAllSortAsc(String field); /** * 查询所有Doc后根据字段排序--降序 * @return */ Iterable<User> FindAllSortDesc(String field); /** * 根据name查询 * @param name * @return */ List<User> findByName(String name); /** * 根据age查询 * @param age * @return */ List<User> findByAge(Integer age); /** * 根据height查询 * @param height * @return */ List<User> findByHeight(Double height); /** * 根据name和aga查询 * @param name * @param age * @return */ List<User> findByNameAndAge(String name, Integer age); /** * 分页查询,需要指定Pageable参数 * 这里name可以有多个,或关系 * @param pageable * @param names * @return */ List<User> findByNameIn(Pageable pageable, String...names); }
impl
package com.example.estest03.impl; import com.example.estest03.dao.UserRepository; import com.example.estest03.pojo.User; import com.example.estest03.service.IElasticService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import org.springframework.stereotype.Service; import java.util.Iterator; import java.util.List; @Service("elasticService") public class ElasticServiceImpl implements IElasticService { @Autowired UserRepository userRepository; @Autowired ElasticsearchRestTemplate elasticsearchRestTemplate; @Override public User saveDoc(User user) { return userRepository.save(user); } @Override public Iterable<User> saveDocAll(List<User> users) { return userRepository.saveAll(users); } @Override public void deletDoc(Integer id) { userRepository.deleteById(id); } @Override public Iterator<User> FinAll() { return userRepository.findAll().iterator(); } @Override public User FinByID(Integer id) { return userRepository.findById(id).get(); } @Override public Iterable<User> FindAllSortAsc(String field) { return userRepository.findAll(Sort.by(Sort.Order.asc(field))); } @Override public Iterable<User> FindAllSortDesc(String field) { return userRepository.findAll(Sort.by(Sort.Order.desc(field))); } @Override public List<User> findByName(String name) { return userRepository.findByName(name); } @Override public List<User> findByAge(Integer age) { return userRepository.findByAge(age); } @Override public List<User> findByHeight(Double height) { return userRepository.findByHeight(height); } @Override public List<User> findByNameAndAge(String name, Integer age) { return userRepository.findByNameAndAge(name, age); } @Override public List<User> findByNameIn(Pageable pageable, String... names) { return userRepository.findByNameIn(pageable,names); } }
controller
package com.example.estest03.controller; import com.example.estest03.pojo.User; import com.example.estest03.service.IElasticService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Iterator; @RestController @RequestMapping("/elastic") public class ElasticController { @Autowired private IElasticService elasticService; @GetMapping("/all") public Iterator<User> all(){ return elasticService.FinAll(); } }
原始查询
/** * 原始查询 */ @Test void query(){ //构建查询条件 NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(QueryBuilders.queryStringQuery("zhangsan和lisi"))//指定使用的查询方式 .withSort(SortBuilders.fieldSort("age").order(SortOrder.DESC))//排序--降序 .withPageable(PageRequest.of(0,10))//分页 .build(); //执行查询方法 SearchHits<User> searchHits = elasticsearchRestTemplate.search(searchQuery, User.class); // for (SearchHit<User> searchHit : searchHits) { // System.out.println(searchHit.getContent()); // } searchHits.forEach(searchHit -> System.out.println(searchHit.getContent())); }