栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

SpringBoot整合ElasticSearch快速入门

SpringBoot整合ElasticSearch快速入门

SpringBoot整合ElasticSearch 1.导入依赖 1.1 导入SpringBoot的基础相关依赖

注意再倒入相关依赖的时候需要导入一个Springboot管理依赖的parent,否则在导入其他依赖不写版本就会报错,因为在这个parent中,springboot内部自动帮我们固定了版本号等。

 
     org.springframework.boot
     spring-boot-starter-parent
     2.0.5.RELEASE



    
    
        org.springframework.boot
        spring-boot-starter-web
    

    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    

1.2 导入ElasticSearch相关依赖
 
 
     org.springframework.boot
     spring-boot-starter-data-elasticsearch
 
2.配置ElasticSearch 2.1 配置文件中配置ElasticSearch

resources中创建applciation.yml配置文件

spring:
  application:
    name: ESApplication
  data:
    elasticsearch:
      cluster-name: elasticsearch
      cluster-nodes: 127.0.0.1:9300 #9200是图形界面端,9300代码端
3.创建ElasticSearch文档对象 3.1 创建UserDoc类

该类主要是,需要做文档映射的那张表对应的字段。

@document(indexName = "hrm" , type = "user")
public class UserDoc {

    //对应文档的id  PUT  /index/type/id
    @Id
    private Long id;

    @Field(type = FieldType.Keyword)    //指定为 不分词
    private String userName;

    private int age;

    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")
    private String intro;
}
3.2 创建测试类映射文档

这里我们采用在测试类做文档映射的方式来简单学会对ElasticSearch在Springboot中的操作。创建了文档映射之后可以对其中的内容做查询、条件匹配等。

// 指定启动类
@SpringBootTest(classes = ESApplication.class)
@RunWith(SpringRunner.class)
public class ESTest {
    @Autowired
    public ElasticsearchTemplate elasticsearchTemplate;


    @Test
    public void testCreateIndex() {
        // 创建索引
        elasticsearchTemplate.createIndex(UserDoc.class);

        // 做文档映射
        elasticsearchTemplate.putMapping(UserDoc.class);
    }

}
4.SpringBoot中对Elasticsearch的基本操作 4.1 继承ElasticsearchRepository类

Springboot中已经封装好了一个类供我们使用,直接继承他然后就可以使用了。

// 继承了一个SringBoot中封装好的可以对ES进行操作的类
@Repository
public interface UserElasticSearchRepository extends ElasticsearchRepository {}
4.2 基本的ElasticSearch操作

在前面的测试类中,注入UserElasticSearchRepository,然后操作已经创建好的文档

4.2.1 添加数据

添加好的数据可以通过Kibana可视化界面去查看数据是否添加成功。

// 文档的添加
@Test
public void testAdd() {
    for (long i = 1; i < 10; i++) {
        UserDoc userDoc = new UserDoc();
        userDoc.setId(i);
        if (i % 2 == 0) {
            userDoc.setUserName("芜湖大司马");
            userDoc.setAge(30);
        } else {
            userDoc.setUserName("烫嘴PDD");
            userDoc.setAge(28);
        }
        userElasticSearchRepository.save(userDoc);
    	System.out.println("保存成功");
    }
}
4.2.2 简单查询

查询出得到结果,这里只是简单查询。

// 查询
@Test
public void testGet() {
    Optional user = userElasticSearchRepository.findById(5L);
    UserDoc userDoc = user.get();
    System.out.println(userDoc.getUserName());
}
4.2.3 删除数据

删除某条数据之后,在使用查询可以看到该条数据已经查询不到了。

 // 删除操作
 @Test
 public void testDelete() {
     // 通过ID删除ES中的这条数据
     userElasticSearchRepository.deleteById(5L);
     System.out.println("删除成功");
     testGet();
 }
4.3 ElasticSearch的高级查询

做高级查询我们采用另外一种封装好的工具对ElasticSearch做查询。

NativeSearchQueryBuilder:本地查询的builder

BoolQueryBuilder:组合查询的条件

withSort:排序

whithPageable:分页

NativeSearchQuery: 查询对象

使用查询对象将上述的所有可能用到的条件,调用repository方法进行查询

term表示精确匹配,value值不会被分词器拆分,按照倒排索引匹配
match表示全文检索,value值会被分词器拆分,然后去倒排索引中匹配
range表示范围检索,其value值是一个对象,如{ “range”: {field: {比较规则: value, …}} } 比较规则有gt / gte / lt / lte 等

@Test
    public void testSearch(){

        //创建一个本机查询builder
        NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
        //=================================================
        //1.查询条件
        //组合查询
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

        //查询 username 中包含 pd : DSL查询 - must - match
        boolQueryBuilder.must(QueryBuilders.matchQuery("intro","掌握"));

        // Age 在 10 - 20 : DSL过滤 - filter - range
        boolQueryBuilder.filter(QueryBuilders.rangeQuery("age").gte(10).lte(20));

        builder.withQuery(boolQueryBuilder);

        //2.排序 按照id倒排
        builder.withSort(new FieldSortBuilder("id").order(SortOrder.DESC));
        //3.分页
        builder.withPageable(PageRequest.of(0,5));
        //=================================================
        //构建一个查询对象
        NativeSearchQuery searchQuery  = builder.build();

        //执行查询,得到结果
        Page page = userElasticSearchRepository.search(searchQuery);
        //page  -> PageList

        System.out.println("总条数:"+page.getTotalElements());
        System.out.println("总页数:"+page.getTotalPages());

        //结果列表
        List content = page.getContent();

        content.forEach(userDoc -> {
            System.out.println(userDoc);
        });
    }

上述java代码对应在kibana中的表达:

GET hrm/user/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "age": {
            "gte": 10,
            "lte": 20
          }
        }
      },
      "must": [
        {
          "match": {
            "intro": "掌握"
          }
        }
      ]
    }
  }
  , "sort": [
    {
      "id": {
        "order": "desc"
      }
    }
  ]

}
注意:以上所有的测试默认ElasticSearch配置完成,并开启ElasticSearch。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/654192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号