springboot整合ElasticSearch
- springboot 整合ElasticSearch 前提
前提是在服务器上面已经搭建了ElasticSearch,并且能外网访问
- pom.xml依赖
<!--spring整合elasticsearch包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!--实体工具包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--集合工具包-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
- 操作的实体类
package com.study.cdmy.entry;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.elasticsearch.annotations.Document;
import java.math.BigDecimal;
/**
* 产品
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
//indexName代表所以名称,type代表表名称
@Document(indexName = "es_product", type = "doc")
public class Product {
//id
@JsonProperty("auto_id")
private Long id;
//产品名称
@JsonProperty("name")
private String name;
//产品详情
@JsonProperty("detail")
private String detail;
//产品价格
@JsonProperty("money")
private BigDecimal money;
}
- 编写ProductRepository类
package com.study.cdmy.Config;
import com.study.cdmy.entry.Product;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;
@Component
public interface ProductRepository extends ElasticsearchRepository<Product, Long> {
}
- 编写ProductEsController类
package com.study.cdmy.Controller;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.study.cdmy.Config.ProductRepository;
import com.study.cdmy.entry.Product;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import com.alibaba.fastjson.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.List;
@RestController
@RequestMapping("/es/productEs")
public class ProductEsController {
@Autowired
private ProductRepository productRepository;
@RequestMapping("save")
public String save(long id, String title) {
Product product = new Product();
for (int i = 1; i < 100; i++) {
product.setId(Long.valueOf(i));
product.setDetail("产品详情"+i);
product.setMoney(new BigDecimal(i));
product.setName("名字名字"+i);
productRepository.save(product);
}
return "Success";
}
/**
* @param title 搜索标题
* @param pageable page = 第几页参数, value = 每页显示条数
*/
@RequestMapping("search")
public JSONObject search(String title, @PageableDefault(page = 1, value = 10) Pageable pageable) {
//按标题进行搜索
QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", title);
//如果实体和数据的名称对应就会自动封装,pageable分页参数
Iterable<Product> listIt = productRepository.search(queryBuilder, pageable);
//Iterable转list
List<Product> list = Lists.newArrayList(listIt);
JSONArray ja = new JSONArray();
for(Product p : list){
JSONObject jsonObject = p.toJSONObject();
ja.add(jsonObject);
}
JSONObject result = new JSONObject();
result.put("result", ja);
return result;
}
}
- 启动程序
–未完。。。