SpringBoot项目整合Elasticsearch

前言:
Elasticsearch是一个基于Lucene的搜索服务器,他提供了一个分布式多用户能力的全文搜索引擎。Elasticsearch本身就是集群的,默认有5个分片。

一、在项目中导入坐标依赖

    
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
        

二、添加配置

spring:
  data:
    elasticsearch:
      cluster-name: my-application //ElasticSearch的名字
      cluster-nodes: 127.0.0.1:9300

三、索引操作

3.1建立实体类
@Data
@AllArgsConstructor
//第一个参数:索引库名字
//第二个参数:类型名称
@Document(indexName = "skus01", type = "goods")
public class Item {
    public Item() {
    }

    @Id
    private Long id;
    //标题需要分词,所以类型为Text,指定ik分词器
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String title;
    //分类不需要分词,所以指定为keyword类型,代表只索引,不分词
    @Field(type = FieldType.Keyword)
    private String category;// 分类    
    @Field(type = FieldType.Keyword)
    private String brand; // 品牌  
    //价格为Double类型  
    @Field(type = FieldType.Double)
    private Double price; // 价格  
    //图片地址不需要索引,不需要分词
    @Field(type = FieldType.Keyword,index = false)
    private String images; // 图片地址
}

注意:

  • 什么时候需要被索引?
    需要被搜索的列,就要被索引
  • 什么时候需要被分词?
    需要模糊查询的列
  • 什么时候需要被存储?
    结果需要显示的列一定要存储
3.2建立索引
@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticsearchTest {

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;
    
    @Test
    public void createIndex(){
    //创建索引
        elasticsearchTemplate.createIndex(Item.class);
        //建立映射
        elasticsearchTemplate.putMapping(Item.class);
    }
 }

创建成功后如下图:
SpringBoot项目整合Elasticsearch_第1张图片

3.3向ElasticSearch中添加数据:

Repository接口
Spring Data 的强大之处,就在于你不用写任何DAO处理,自动根据方法名或类的信息进行CRUD 操作。只要你定义一个接口,然后继承Repository提供的一些子接口,就能具备各种基本的CRUD功 能。

public interface ItemRepositroy extends ElasticsearchRepository {}

添加数据:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticsearchTest {

//注入刚刚自定义的接口对象
    @Autowired
    private ItemRepositroy itemRepositroy;
    
    @Test
    public void saveIndex(){
            Item item3 = new Item(4l,"小米手机11pro1","手机","小米",3999.0,"https://img14.360buyimg.com/n1/s450x450_jfs/t1/65786/38/8555/351173/5d674913E0a3b51f6/8d2e3fadc4cfac3c.jpg");
            Item item4 = new Item(5l,"坚果手机51","手机","锤子",999.0,"https://img14.360buyimg.com/n1/s450x450_jfs/t1/65786/38/8555/351173/5d674913E0a3b51f6/8d2e3fadc4cfac3c.jpg");
            
        itemRepositroy.save(item3);
        itemRepositroy.save(item4);
    }
  }

在这里插入图片描述

四、查询数据:

方式一:

    @Test
    public void selectIndex(){
        Iterable all = itemRepositroy.findAll();
        Iterator iterator = all.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
      }

方式二:
自定义方法:

public interface ItemRepositroy extends ElasticsearchRepository {

    public List findByTitle(String title);
}
    @Test
    public void selectIndex(){
       List list = itemRepositroy.findByTitle("手机");
        for (Item item : list) {
            System.out.println(item);
        }
    }

方式三:
自定义查询:

    @Test
    public void queryIndex(){
        //创建查询构建器
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        queryBuilder.withQuery(QueryBuilders.matchQuery("title","小米手机"));
        Page search = itemRepositroy.search(queryBuilder.build());
        for (Item item : search) {
            System.out.println(item);
        }
    }

你可能感兴趣的:(Java,elasticsearch)