最新Elasticsearch Java 客户端查询例子

Elasticsearch 自 7.16 版本(2021年12月8日)推出 Elasticsearch Java API Client.Elasticsearch Java API 客户端为所有的 Elasticsearch API 提供请求和响应处理.

它将请求处理转给 Elasticsearch Low Level REST 客户端,这也是 High Level 被废弃而 Low Level REST 客户端依然健在的原因,Low Level REST 客户端负责处理 Http 连接建立和池化,重试机制等所有传输级别的问题.

  • 特点1:对象构造基于构建者模式( builder pattern).
  • 特点2:使用 lambda 构建嵌套对象,从而编写干净,富有表现力的 DSL 变得容易.
  • 特点3:应用程序类能自动映射为 Mapping.

创建 Elasticsearch Java 客户端

让我们先创建好 Elasticsearch Java 客户端:

java 复制代码
RestClient restClient = RestClient
  .builder(HttpHost.create("http://localhost:9200"))
  .build();
ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
ElasticsearchClient client = new ElasticsearchClient(transport);

现在,我们已准备好与 Elasticsearch 进行交互.接下来,我将给出3种查询示例.

Match查询

样例索引数据

json 复制代码
{
  "columns" : [
    {
      "name" : "des",
      "type" : "text"
    },
    {
      "name" : "name",
      "type" : "text"
    },
    {
      "name" : "price",
      "type" : "float"
    },
    {
      "name" : "sku",
      "type" : "text"
    }
  ],
  "rows" : [
    [
      "旺仔牛比糖吃了炒鸡牛笔",
      "旺仔牛比糖",
      6.66,
      "aabbcc555"
    ],
    [
      "农夫三拳有点甜",
      "农夫三拳",
      3.0,
      "3344"
    ]
  ]
}

DSL查询语句

json 复制代码
POST /produces/_search
{
  "query": {
    "match": {
      "name": {
        "query": "农夫三拳"
      }
    }
  }
}

使用MatchQuery

java 复制代码
MatchQuery matchQuery = MatchQuery.of(bd -> bd.field("name").query("农夫三拳"));
Builder builder1 = new SearchRequest.Builder();
builder1.index("produces").query(matchQuery._toQuery());

System.out.println(matchQuery._toQuery());
final SearchResponse<Produce> response1 = client.search(builder1.build(), Produce.class);
System.out.println(response1.hits().hits());

使用lambda表达式

java 复制代码
final SearchResponse<Produce> response2 = client.search(builder -> builder.index("produces")
    .query(q -> q.match(t -> t.field("name")
        .query("农夫三拳"))),
    Produce.class);
System.out.println(response2.hits().hits());

使用 Query.Builder

java 复制代码
Query.Builder queryBuilder = new Query.Builder();
queryBuilder.match(bd -> bd.field("name").query("农夫三拳"));
Builder searchRequestBuilder = new SearchRequest.Builder();
Query query = queryBuilder.build();
searchRequestBuilder.index("produces").query(query);

System.out.println(query);
final SearchResponse<Produce> response1 = client.search(searchRequestBuilder.build(), Produce.class);
System.out.println(response1.hits().hits());
相关推荐
Lumistory6 小时前
城市建筑照明的落地与长效运营观察
大数据·数据库·中间件·光照贴图
Elastic 中国社区官方博客14 小时前
你的 AI agent 不需要你的 API 密钥:使用 OAuth 2.1 对 Elasticsearch MCP 服务器进行身份验证
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索
互联网中的一颗神经元20 小时前
ZZ — Git 速查表
大数据·git·elasticsearch
Elasticsearch21 小时前
跳过有状态的 OTel Collector:Elasticsearch 9.5 原生存储两种指标时间类型
elasticsearch
C++、Java和Python的菜鸟1 天前
第2章 项目前置课-代码版本控制Git
大数据·elasticsearch·搜索引擎
Elasticsearch2 天前
什么是混合搜索?
elasticsearch
Elasticsearch2 天前
从点击流中提升搜索相关性:使用 Learn To Rank 和 OpenTelemetry 行为信号
elasticsearch
倒流时光三十年2 天前
第六阶段 57 · ES|QL 与 SQL API(用 SQL 查 ES)
数据库·sql·elasticsearch
Elastic 中国社区官方博客2 天前
我们如何重构 APM 服务地图以应对事件响应:Observability 9.5 背后的设计故事
大数据·人工智能·elasticsearch·重构·全文检索
guwentian2 天前
Git Worktree 实战:用并行多 Agent 把开发提速 N 倍
大数据·git·elasticsearch·wroktree