Java怎么在项目中集成Elasticsearch7.x版本

传统的Elasticsearch6.x以下的版本在一些内网开发的企业,可能多数不会去使用到,用到比较多的话大都是7.x版本的,我在这里使用到的是Elasticsearch7.8版本,因为安全性高,使用7.8需要提供到用户名和密码

1.首先要在yml配置好相应参数

  elasticsearch:
     rest:
       host: x.x.x.x
       port: 9200
       username: xxxxxx
       password: xxxxxx

2.创建好之后就可以去写一个配置类去集成AbstractElasticsearchConfiguration类(Spring Data Elasticsearch 提供的一个基础配置类,用于配置 Elasticsearch 相关的一些参数和设置)

,然后在配置类里面去实现

@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
    private static final Logger logger = LoggerFactory.getLogger(ElasticsearchConfig.class);

    @Value("${jeecg.elasticsearch.rest.host}")
    private String host;

    @Value("${jeecg.elasticsearch.rest.port}")
    private int port;

    @Value("${jeecg.elasticsearch.rest.username}")
    private String username;

    @Value("${jeecg.elasticsearch.rest.password}")
    private String password;

    @Bean
//这是 Elasticsearch 官方 Java 客户端的高级 REST 客户端
    public RestHighLevelClient elasticsearchClient() {
        logger.info("Elasticsearch Host: {}", host);
        logger.info("Elasticsearch Port: {}", port);
        logger.info("Elasticsearch Username: {}", username);
        logger.info("Elasticsearch Password: {}", password);
//AuthScope.ANY 表示这些凭证将适用于任何主机和端口
        BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));

        RestClientBuilder builder = RestClient.builder(new HttpHost(host, port, "http"))
                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));

        return new RestHighLevelClient(builder);
    }

    @Bean
//这是 Spring Data Elasticsearch 提供的一个高级模板,用于与 Elasticsearch 进行交互
    public ElasticsearchRestTemplate elasticsearchTemplate() {
        return new ElasticsearchRestTemplate(elasticsearchClient());
    }

    @Bean
//创建了一个 MappingElasticsearchConverter 实例,用于在 Elasticsearch 文档和 Java 实体类之间执行映射转换。这个转换器依赖于上面创建的 Elasticsearch 映射上下文
    public MappingElasticsearchConverter elasticsearchConverter() {
        return new MappingElasticsearchConverter(elasticsearchMappingContext());
    }
}

3.我们构建好几本的ES客户端后,在添加完数据后,就可以去实现搜索功能了

@Service
@Slf4j
public class IDisciplineWorkESServiceImpl implements IDisciplineWorkESService {

        @Autowired
        private ElasticsearchOperations template;

    @Override
    public List<DisciplineWorkESDTO> search(String title) {
        // 创建一个NativeSearchQueryBuilder,用于构建Elasticsearch查询
        NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
        if (title != null) {
            //构建多字段查询条件
            BoolQueryBuilder should = QueryBuilders.boolQuery()
                    .should(QueryBuilders.queryStringQuery(title).field("articleTitle"))
                    .should(QueryBuilders.queryStringQuery(title).field("content"))
                    .should(QueryBuilders.queryStringQuery(title).field("authorName"));

            nativeSearchQueryBuilder.withQuery(should);
            // 设置分页,这里设置为第一页,每页10条
            nativeSearchQueryBuilder.withPageable(PageRequest.of(0, 10));

            // 创建NativeSearchQuery
            NativeSearchQuery query = nativeSearchQueryBuilder.build();
            String s = query.getQuery().toString();
            System.out.println(s);

            // 执行查询
            SearchHits<DisciplineWorkESDTO> searchHits = template.search(query, DisciplineWorkESDTO.class);

            // 获取结果数据并返回
            return searchHits.getSearchHits().stream()
                    .map(searchHit -> searchHit.getContent())
                    .collect(Collectors.toList());
        }
        return null;
    }

}

 在上面的过程中,可能会遇到一些问题
使用RestHighLevelClient创建客户端的时候,不要使用以下方法,会出现一个报错,就是出现要求你关闭ES客户端的问题,有数据泄露的风险

@Bean
    public RestHighLevelClient elasticsearchClient() {
        ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo(host + ":" + port)
                .withBasicAuth(username, password)
                .build();
        return RestClients.create(clientConfiguration).rest();
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值