在 Java Spring Boot 微服务中集成 Elasticsearch 8.x,推荐使用官方的 Elasticsearch Java API Client(不同于 7.x 的 High Level REST Client)。
以下是 Elasticsearch 8.x 集成常用 API 及使用示例:
✅ 一、依赖配置(Maven)
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.11.1</version> <!-- 使用最新 8.x 版本 -->
</dependency>
✅ 二、客户端配置(Spring Bean)
@Configuration
public class ElasticsearchConfig {
@Bean
public ElasticsearchClient elasticsearchClient() {
RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200)).build();
ElasticsearchTransport transport = new RestClientTransport(
restClient, new JacksonJsonpMapper());
return new ElasticsearchClient(transport);
}
}
🔍 三、常用 API 和查询示例
1. Indexing(写入文档)
elasticsearchClient.index(i -> i
.index("products")
.id("1")
.document(new Product("iPhone 15", 799.0))
);
2. Match 查询(全文搜索)
SearchResponse<Product> response = elasticsearchClient.search(s -> s
.index("products")
.query(q -> q
.match(m -> m
.field("name")
.query("iPhone")
)
),
Product.class
);
3. Term 查询(精确匹配)
elasticsearchClient.search(s -> s
.index("products")
.query(q -> q
.term(t -> t
.field("status.keyword")
.value("active")
)
),
Product.class
);
4. Bool 查询(多条件组合)
elasticsearchClient.search(s -> s
.index("products")
.query(q -> q
.bool(b -> b
.must(m -> m.match(mm -> mm.field("name").query("iPhone")))
.filter(f -> f.range(r -> r.field("price").gte(JsonData.of(500)).lte(JsonData.of(1000))))
)
),
Product.class
);
5. 分页 + 排序
elasticsearchClient.search(s -> s
.index("products")
.from(0)
.size(10)
.sort(sort -> sort
.field(f -> f
.field("price")
.order(SortOrder.Desc)
)
),
Product.class
);
6. 删除文档
elasticsearchClient.delete(d -> d
.index("products")
.id("1")
);
✅ 四、实体类示例(Product)
public class Product {
private String name;
private double price;
// Constructors, getters, setters...
}
📌 小结:常用 API 关键点
功能 | API 调用 |
---|---|
写入文档 | client.index() |
全文搜索 | query().match() |
精确匹配 | query().term() |
复合查询 | query().bool() |
分页 & 排序 | from() , size() , sort() |
删除 | client.delete() |