You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Elasticsearch Java API Client中使用Suggest API实现查询?

Elasticsearch Java API Client 7.17.6 带上下文过滤的Completion Suggest查询实现

以下是对应你提供的DSL查询的Java代码片段,适配7.17.6版本的Java API Client:

依赖与导入

确保项目引入Elasticsearch Java API Client相关依赖后,导入必要类:

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.elasticsearch.core.search.CompletionSuggester;
import co.elastic.clients.elasticsearch.core.search.Suggester;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;

完整代码示例

public class PlaceSuggestQuery {
    public static void main(String[] args) throws Exception {
        // 初始化ES客户端
        RestClient restClient = RestClient.builder(
                new HttpHost("localhost", 9200, "http")
        ).build();

        ElasticsearchClient esClient = new ElasticsearchClient(
                new RestClientTransport(restClient, new JacksonJsonpMapper())
        );

        // 构建带上下文过滤的Completion Suggest请求
        SearchRequest searchRequest = SearchRequest.of(req -> req
                .index("your_index_name") // 替换为实际索引名称
                .suggest(Suggester.of(sug -> sug
                        .name("place_suggestion")
                        .completion(CompletionSuggester.of(comp -> comp
                                .field("name")
                                .prefix("oli")
                                .size(10)
                                .contexts("place_type", ctx -> ctx.add("d2c"))
                        ))
                ))
        );

        // 执行查询
        SearchResponse<Void> response = esClient.search(searchRequest, Void.class);

        // 解析并输出结果
        response.suggest().get("place_suggestion").forEach(suggestEntry -> {
            suggestEntry.options().forEach(option -> {
                System.out.println("建议内容: " + option.text());
                // 若需获取源文档字段(如entityId),请将Void.class替换为对应实体类,然后通过option.source()获取
                // System.out.println("Entity ID: " + option.source().entityId());
            });
        });

        // 关闭客户端资源
        restClient.close();
    }
}

关键说明

  1. 客户端初始化:根据你的ES集群地址调整HttpHost参数,若有认证需求需额外配置。
  2. 查询构建:
    • 指定建议器名称为place_suggestion,与DSL中的名称对应
    • 通过completion方法绑定name字段的completion类型,设置前缀、返回数量
    • contexts方法传入上下文键place_type和过滤值d2c,实现上下文过滤
  3. 结果解析:若需要获取源文档的entityId等字段,需定义与索引结构匹配的POJO类,替换代码中的Void.class,即可通过option.source()访问对应字段。

内容的提问来源于stack exchange,提问作者Yatin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:05:37