最新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());
相关推荐
Java 码思客18 小时前
【ElasticSearch从入门到架构师】第5章:ES DSL 检索语法精讲(核心重点)
大数据·elasticsearch
瀚高PG实验室20 小时前
java中间件无法连接数据库
java·数据库·中间件·瀚高数据库
2601_961875241 天前
法考资料电子版|pdf|资料已整理
elasticsearch·搜索引擎·pdf·全文检索·solr·lucene·sphinx
之歆1 天前
Day11_Express 深入解析:从中间件到项目实战
中间件·express
MemoriKu1 天前
Flutter 相册 APP 收尾优化实战:未分析任务横幅持久隐藏与标签回归测试补强
大数据·人工智能·flutter·elasticsearch·机器学习·搜索引擎·重构
码农飞哥1 天前
RocketMQ消费接口设计实战:为什么HTTP回调接口必须吞掉所有异常,始终返回成功?
网络协议·http·中间件·消息队列·rocketmq
JAVA面经实录9171 天前
Elasticsearch 完整版完整知识体系
java·elasticsearch·搜索引擎·es
Upsy-Daisy1 天前
Hermes Agent 学习笔记 06:Skills 系统,Agent 如何把经验沉淀为可复用能力?
大数据·elasticsearch·搜索引擎
硅谷秋水1 天前
物理人工智能的驾驭工程:机器人中间件是驾驭层
人工智能·机器学习·语言模型·中间件·机器人
代码讲故事1 天前
在没有kibana的ES(elasticsearch)线上生产环境集群中,如何通过命令行修改或增加字段而不需要reindex?
大数据·elasticsearch·搜索引擎·命令行·es·索引·模版