elasticsearch 8.14.1 和 Spring Data elasticsearch 实例演示

发布于:2024-07-04 ⋅ 阅读:(138) ⋅ 点赞:(0)

创建工程和配置

实现三类api.

  1. 根据名字检索
  2. 根据分类检索
  3. 根据价格区间

创建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": {
   <

网站公告

今日签到

点亮在社区的每一天
去签到