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

依赖:


    org.springframework.boot
    spring-boot-starter-parent
    2.7.1
     

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

在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 {

    List findAllByUsernameLike(String username);
}

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

关键字的说明

And findByNameAndPrice {“bool” : {“must” : [ {“field” : {“name” : “?”}}, {“field” : {“price” : “?”}} ]}}
Is findByName {“bool” : {“must” : {“field” : {“name” : “?”}}}}
Or findByNameOrPrice {“bool” : {“should” : [ {“field” : {“name” : “?”}}, {“field” : {“price” : “?”}} ]}}
Not findByNameNot {“bool” : {“must_not” : {“field” : {“name” : “?”}}}}
Between findByPriceBetween {“bool” : {“must” : {“range” : {“price” : {“from” : ?,“to” : ?,“include_lower” : true,“include_upper” : true}}}}}
LessThanEqual findByPriceLessThan {“bool” : {“must” : {“range” : {“price” : {“from” : null,“to” : ?,“include_lower” : true,“include_upper” : true}}}}}
GreaterThanEqual findByPriceGreaterThan

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

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

After findByPriceAfter {“bool” : {“must” : {“range” : {“price” : {“from” : ?,“to” : null,“include_lower” : true,“include_upper” : true}}}}}
Like findByNameLike
{“bool” : {“must” : {“field” : {“name” : {“query” : “? *”,“analyze_wildcard” : true}}}}}

如何使用

public EsResponse findUserInfoFuzzyByRepository(String username) {
    List userInfo = esRepository.findAllByUsernameLike(username);
    List 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 userList=new ArrayList<>();
    elasticsearchRestTemplate.search(nativeSearchQueryBuilder.build(), User.class, user)
            .toList().stream().forEach(e->userList.add(e.getContent()));
    List userInfos = EsConvey.INSTANCE.toUserList(userList);
    return EsResponse.builder().userInfoList(userInfos).build();
}

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

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

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

你可能感兴趣的:(spring,boot,elasticsearch,java)