实现基于Elasticsearch的搜索服务

实现基于Elasticsearch的搜索服务

大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!

1. Elasticsearch简介

Elasticsearch是一个开源的分布式搜索引擎,提供强大的全文搜索和分析功能。本文将详细介绍如何在Java应用中集成和使用Elasticsearch来构建高效的搜索服务。

2. 环境准备与配置

在开始之前,确保已经安装并配置好Elasticsearch服务,并且可以访问其REST API。

3. Java集成Elasticsearch
3.1 添加Elasticsearch依赖

首先,在项目的pom.xml文件中添加Elasticsearch的依赖:

xml 复制代码
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.16.0</version>
</dependency>
3.2 编写Elasticsearch客户端配置
java 复制代码
package cn.juwatech.elasticsearch;

import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.RestClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;

@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {

    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("localhost:9200")
                .build();

        return RestClients.create(clientConfiguration).rest();
    }
}
3.3 创建Elasticsearch文档实体
java 复制代码
package cn.juwatech.elasticsearch;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "products")
public class Product {

    @Id
    private String id;
    private String name;
    private String description;
    private double price;

    // 省略构造方法和getter/setter
}
3.4 定义Elasticsearch数据访问接口
java 复制代码
package cn.juwatech.elasticsearch;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import java.util.List;

public interface ProductRepository extends ElasticsearchRepository<Product, String> {

    List<Product> findByName(String name);

    List<Product> findByDescription(String description);

    List<Product> findByNameOrDescription(String name, String description);
}
4. 使用Elasticsearch进行搜索
4.1 添加数据到Elasticsearch索引
java 复制代码
package cn.juwatech.elasticsearch;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public void saveProduct(Product product) {
        productRepository.save(product);
    }

    public Iterable<Product> findAllProducts() {
        return productRepository.findAll();
    }
}
4.2 执行搜索操作
java 复制代码
package cn.juwatech.elasticsearch;

import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductSearchService {

    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    public List<Product> searchProducts(String query) {
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(QueryBuilders.queryStringQuery(query));

        return elasticsearchRestTemplate.queryForList(
                sourceBuilder.build(), Product.class);
    }
}
5. 总结

本文介绍了如何利用Java语言集成Elasticsearch,实现基于Elasticsearch的高效搜索服务。从配置Elasticsearch客户端、定义文档实体、编写数据访问层到执行搜索操作,详细展示了整个实现过程。

微赚淘客系统3.0小编出品,必属精品,转载请注明出处!

相关推荐
Raas10019 分钟前
AI网关和OpenRouter区别?MAI Gateway(魔芋企业级AI网关)企业级方案对比指南
大数据·开发语言·人工智能·gateway·php·ai网关·mai gateway
Raas10030 分钟前
MAI Gateway(魔芋企业级AI网关)技术辨析:AI网关和大模型网关区别?选型必读
大数据·人工智能·大模型·gateway·mai gateway·企业级产品
FII工业富联科技服务8 小时前
Omniverse + Isaac Teleop + 合成数据:工业富联机器人大脑训练+执行落地闭环拆解
大数据·人工智能·深度学习·机器学习·机器人·制造·具身智能
airank10 小时前
2026年GEO服务商选型指南:系统梳理服务商分类框架、主流服务商能力横评、企业级选型六大维度及避坑要点,帮助企业在AI搜索时代做出科学决策。
大数据·人工智能·数据分析·aigc
Delite80210 小时前
摆脱实验室束缚:便携式卡尔费休微量水分检测技术与现场应用解析
大数据·网络·人工智能
袋鼠云数栈10 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛1392462567310 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
大大大大晴天10 小时前
大数据数据治理到底治理什么:从“数据可用”到“数据可信”
大数据
ACP广源盛1392462567310 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
策案案案12 小时前
YOLO: 将AI Agents嵌入到IntelliJ IDEA
java·大数据·人工智能·笔记·yolo·microsoft·intellij-idea