SpringBoot集成ElasticSearch并使用的两种方法

依赖:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.1</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

在java代码中使用的几种方法

1.使用JPA的方法使用ElasticSearch

1.首先创建对应的实体类

@Document(indexName = "user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {


    private String id;
    private String username;
    private String department;
    private String sex;
    private Integer age;
    private String firstName;
    private String lastName;
}

2.创建实现的Repository去继承ElasticsearchRepository

public interface EsRepository extends ElasticsearchRepository<User,String > {

    List<User> findAllByUsernameLike(String username);
}

里面可以按照JPA的命名规范去命名并实现查找,如Like就是模糊查询,下面是一些

关键字的说明

AndfindByNameAndPrice{“bool” : {“must” : [ {“field” : {“name” : “?”}}, {“field” : {“price” : “?”}} ]}}
IsfindByName{“bool” : {“must” : {“field” : {“name” : “?”}}}}
OrfindByNameOrPrice{“bool” : {“should” : [ {“field” : {“name” : “?”}}, {“field” : {“price” : “?”}} ]}}
NotfindByNameNot{“bool” : {“must_not” : {“field” : {“name” : “?”}}}}
BetweenfindByPriceBetween{“bool” : {“must” : {“range” : {“price” : {“from” : ?,“to” : ?,“include_lower” : true,“include_upper” : true}}}}}
LessThanEqualfindByPriceLessThan{“bool” : {“must” : {“range” : {“price” : {“from” : null,“to” : ?,“include_lower” : true,“include_upper” : true}}}}}
GreaterThanEqualfindByPriceGreaterThan

{“bool” : {“must” : {“range” : {“price” : {“from” : ?,“to” : null,

“include_lower” : true,“include_upper” : true}}}}}

AfterfindByPriceAfter{“bool” : {“must” : {“range” : {“price” : {“from” : ?,“to” : null,“include_lower” : true,“include_upper” : true}}}}}
LikefindByNameLike
{“bool” : {“must” : {“field” : {“name” : {“query” : “? *”,“analyze_wildcard” : true}}}}}

如何使用

public EsResponse findUserInfoFuzzyByRepository(String username) {
    List<User> userInfo = esRepository.findAllByUsernameLike(username);
    List<EsResponse.userInfo> userInfos = EsConvey.INSTANCE.toUserList(userInfo);
    return EsResponse.builder().userInfoList(userInfos).build();
}

2.使用ElasticsearchRestTemplate的方法使用ElasticSearch

2.1首先

@Autowired
ElasticsearchRestTemplate elasticsearchRestTemplate;

2.2代码实现

@Override
public EsResponse findUserInfoFuzzyByEsTemplate(String username) {
    BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder().must(new WildcardQueryBuilder("username","*"+username+"*"));
    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder()
            .withQuery(boolQueryBuilder);
    IndexCoordinates user = IndexCoordinates.of("user");
    
    List<User> userList=new ArrayList<>();
    elasticsearchRestTemplate.search(nativeSearchQueryBuilder.build(), User.class, user)
            .toList().stream().forEach(e->userList.add(e.getContent()));
    List<EsResponse.userInfo> userInfos = EsConvey.INSTANCE.toUserList(userList);
    return EsResponse.builder().userInfoList(userInfos).build();
}

博主发现可能由于版本的不同,elasticsearchRestTemplate实现的方法也会不同。

比如可能有小伙伴会发现为什么博主这里是BoolQueryBuilder,其他博主有用BoolQuery的,也有去用Bool的,这需要小伙伴合理的去运用变化了。

这些只是代码中的简单运用,暂时先分享到这里。谢谢

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值