Elasticsearch文档Java 查找API
一、精确查找一个
@Test
public void testQueryOne() throws IOException {
GetRequest getRequest = new GetRequest(INDEX_NAME, "14454339374");
GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
String sourceAsString = documentFields.getSourceAsString();
log.info("获取到的对象:{}", sourceAsString);
}
二、查找符合条件的多个
@Test
public void testQueryWithCondition() throws IOException {
SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
searchRequest.source().query(QueryBuilders.matchQuery("name", "小米"));
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
}
三、查找全部
@Test
public void testQueryAll() throws IOException {
SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
searchRequest.source().query(QueryBuilders.matchAllQuery());
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
}
四、复杂查找
@Test
public void testQueryWithCondition2() throws IOException {
SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.must(QueryBuilders.termQuery("brand", "小米"))
.filter(QueryBuilders.rangeQuery("price").gte(5000))
.mustNot(QueryBuilders.matchQuery("name", "小米8"));
searchRequest.source().query(boolQueryBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
}
五、分页查找
@Test
public void testQueryByPage() throws IOException {
SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.must(QueryBuilders.termQuery("brand", "小米"))
.filter(QueryBuilders.rangeQuery("price").gte(5000))
.mustNot(QueryBuilders.matchQuery("name", "小米8"));
searchRequest.source().query(boolQueryBuilder).from(0).size(10);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
}
六、高亮查找
request.source()
.query(boolQueryBuilder)
.highlighter()
.field("name")
.preTags("<font style='color:red'>")
.postTags("</font>");
七、算分查询
@Test
public void testAddScore() throws IOException {
SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.must(QueryBuilders.termQuery("brand", "小米"))
.filter(QueryBuilders.matchQuery("name", "小米 三星"));
FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(
boolQueryBuilder,
new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
QueryBuilders.matchQuery("name", "小米"),
ScoreFunctionBuilders.weightFactorFunction(10)
)
}
).boostMode(CombineFunction.SUM);
searchRequest.source().query(functionScoreQueryBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
handleResponse(response);
}
10.聚合查询 查找某一属性的统计
@Test
public void testTerm() throws IOException {
SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
searchRequest.source().aggregation(AggregationBuilders.terms("brand_agg").field("brand"));
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
Terms brandAgg = response.getAggregations().get("brand_agg");
List<? extends Terms.Bucket> buckets = brandAgg.getBuckets();
for (Terms.Bucket bucket : buckets) {
String keyAsString = bucket.getKeyAsString();
long docCount = bucket.getDocCount();
log.info("品牌:{},数量:{}", keyAsString, docCount);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?