引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
</dependencies>
实体类
@AllArgsConstructor
@Document(indexName = "item")
public class Item {
@Id
private Long id;
private String title; //标题
private String category;// 分类
private String brand; // 品牌
private Double price; // 价格
private String images; // 图片地址
}
Config
1、ElasticConfig
@Configuration
public class ElasticConfig {
@Resource
private Environment environment;
@Bean(destroyMethod = "close")
public RestHighLevelClient restHighLevelClient(){
return new RestHighLevelClient(RestClient.builder(
new HttpHost(environment.getProperty("es.host"),Integer.parseInt(environment.getProperty("es.port")),
environment.getProperty("es.scheme")
)));
}
}
2、application.yml
spring:
data:
elasticsearch:
repositories:
enabled: true
es:
host: 120.24.240.192
port: 9200
scheme: http
Repository\Service
1、Repository
public interface ItemRepository extends ElasticsearchRepository<Item,String> {
}
2、Service
保存、按Id查询、查询所有、分页查询、条件查询、按Id删除
public interface ItemService {
Optional<Item> findById(String id);
void saveAll(List<Item> items);
Iterable<Item> findAll();
Page<Item> findAllByPage(PageRequest pageRequest);
List<Item> query(String queryContent);
void deleteById(String id);
}
3、ServiceImpl
@Service("itemService")
public class ItemServiceImpl implements ItemService{
@Autowired
@Qualifier("itemRepository")
private ItemRepository itemRepository;
@Autowired
RestHighLevelClient restHighLevelClient;
//按ID查询
@Override
public Optional<Item> findById(String id) {
return itemRepository.findById(id);
}
//保存所有
@Override
public void saveAll(List<Item> items) {
itemRepository.saveAll(items);
}
//查询所有
@Override
public Iterable<Item> findAll() {
return itemRepository.findAll();
}
//分页查询
@Override
public Page<Item> findAllByPage(PageRequest pageRequest) {
return itemRepository.findAll(pageRequest);
}
//条件查询
@SneakyThrows
@Override
public List<Item> query(String queryContent) {
//查询条件
QueryBuilder matchQuery = QueryBuilders.matchQuery("title", queryContent);
//查询创建
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(matchQuery);
//查询条数
sourceBuilder.size(10);
//查询字段 第一个是需要展现的字段,第二个是需要过滤的字段
sourceBuilder.fetchSource(new String[]{"id","title","brand"},new String[]{});
//搜索请求
SearchRequest searchRequest = new SearchRequest();
//设置索引
searchRequest.indices("item");
//设置需要传送的json
searchRequest.source(sourceBuilder);
//发送请求
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
List<Item> list = new ArrayList<>();
for (SearchHit hit :
search.getHits()) {
Item item = JSONObject.parseObject(hit.getSourceAsString(), Item.class);
list.add(item);
}
return list;
}
@Override
public void deleteById(String id) {
itemRepository.deleteById(id);
}
}
Test测试
@SpringBootTest
class SpringEsApplicationTests {
@Autowired
private ItemService itemService;
@Test
public void save(){
List<Item> list = new ArrayList<>();
for (int i=0;i<10;i++){
Random random = new Random();
Item item = new Item();
item.setId(Long.valueOf(i));
item.setBrand("品牌"+i);
item.setCategory("类别"+i);
item.setImages("图片"+i);
item.setPrice(random.nextDouble());
item.setTitle("标题"+i);
list.add(item);
}
itemService.saveAll(list);
System.out.println("success add");
}
@Test
public void testFindAll(){
Iterable<Item> items = itemService.findAll();
items.forEach(System.out::println);
}
/**
* 分页查询
*/
@Test
public void testFindAllByPage(){
//排序方式 降序
Sort sort = Sort.by(Sort.Direction.DESC, "id");
int curr=0;//当前页 第一页0 第二页1
int pageSize=5;//每页显示多少条
PageRequest pageRequest = PageRequest.of(curr, pageSize, sort);
Page<Item> itemPage = itemService.findAllByPage(pageRequest);
itemPage.forEach(System.out::println);
}
@Test
public void testQuery(){
List<Item> query = itemService.query("4");
query.forEach(System.out::println);
}
@Test
public void testDeleteById(){
String id="1";
itemService.deleteById(id);
System.out.println("success delete");
}
}