创建工程和配置
实现三类api.
- 根据名字检索
- 根据分类检索
- 根据价格区间
创建spring boot工程,添加elasticsearch依赖
配置Elasticsearch
@Configuration
@EnableElasticsearchRepositories(basePackages = "github.io.truongbn.elasticsearch.repository")
public class ClientConfig extends ElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder()
.connectedTo("192.168.163.13:9200")
.withBasicAuth("elastic","123456")
.build();
}
}
更多配置参考地址
Object Mapping 对象映射
Spring Data Elasticsearch 可以将对象映射为JSON,存储在ES中,也可以将其转化为对象。
@Data
@Document(indexName = "itemindex")
public class Item {
@Id
private int id;
@Field(type = FieldType.Text, name = "name")
private String name;
@Field(type = FieldType.Double, name = "price")
private Double price;
@Field(type = FieldType.Keyword, name = "brand")
private String brand;
@Field(type = FieldType.Keyword, name = "category")
private String category;
}
- @Document: 将类对象存储在索引名为itemindex的索引中
- @Id: 确保doc在index中唯一.
- @Field: 定义或者映射doc中的字段
更多关于对象映射参考: Elasticsearch Object Mapping
Elasticsearch Repositories
集成ElasticsearchRepository类,继承save()
, saveAll()
,findAll()
等方法。ElasticsearchRepository是根据方法名产生查询。
public interface ItemRepository
extends ElasticsearchRepository<Item, Integer> {
}
下面是额外实现的方法
public interface ItemRepository
extends ElasticsearchRepository<Item, Integer> {
List<Item> findByName(String name);
List<Item> findByCategory(String category);
List<Item> findByPriceBetween(Double low, Double high);
}
根据方法产生查询JSON,findByPriceBetween方法产生查询JSON如下所示
{
"query": {
"bool": {
"must": [
{
"range": {
"price": {
<