Java操作ES多条件检索测试返回条数默认是10 概述 本文将向你介绍如何使用Java操作Elasticsearch(ES)实现多条件检索,并设置返回条数默认为10。ES是一个开源的搜索引擎,被广泛应用于全
Java操作ES多条件检索测试返回条数默认是10
概述
本文将向你介绍如何使用Java操作Elasticsearch(ES)实现多条件检索,并设置返回条数默认为10。ES是一个开源的搜索引擎,被广泛应用于全文搜索、日志分析、数据可视化等场景。
流程图
下面是实现该功能的整体流程图:
erDiagram
开始 --> 连接ES
连接ES --> 创建索引
创建索引 --> 插入数据
插入数据 --> 构建查询条件
构建查询条件 --> 执行查询
执行查询 --> 解析结果
解析结果 --> 关闭连接
关闭连接 --> 结束
步骤详解
1. 连接ES
首先,我们需要连接到Elasticsearch服务器。可以使用Java的TransportClient库来实现连接。
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
public class ESClient {
public static TransportClient getClient() {
// 设置集群名称
Settings settings = Settings.builder().put("cluster.name", "my-es-cluster").build();
// 创建客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300));
return client;
}
}
在上述代码中,我们通过设置集群名称和连接地址来创建TransportClient对象。
2. 创建索引
在进行数据检索前,我们需要先创建一个索引,用于存储和管理数据。
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.transport.TransportClient;
public class ESIndex {
public static void createIndex(TransportClient client, String indexName, String typeName) {
// 创建索引请求
CreateIndexRequest request = new CreateIndexRequest(indexName);
// 设置索引的类型
request.mapping(typeName, "{ \"properties\": { \"field1\": { \"type\": \"text\" } } }");
// 发送请求
CreateIndexResponse response = client.admin().indices().create(request).actionGet();
// 判断索引是否创建成功
if (response.isAcknowledged()) {
System.out.println("Index created successfully!");
} else {
System.out.println("Failed to create index!");
}
}
}
在上述代码中,我们使用CreateIndexRequest对象设置索引名称和类型,并通过mapping方法定义字段的类型。然后,我们发送创建索引的请求,并根据响应结果判断是否创建成功。
3. 插入数据
在创建索引后,我们需要插入一些数据供检索。
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.client.transport.TransportClient;
public class ESData {
public static void insertData(TransportClient client, String indexName, String typeName) {
// 创建批量插入请求
BulkRequestBuilder request = client.prepareBulk();
// 添加插入操作
request.add(client.prepareIndex(indexName, typeName).setSource("field1", "value1"));
request.add(client.prepareIndex(indexName, typeName).setSource("field1", "value2"));
// 执行批量插入请求
BulkResponse response = request.get();
// 判断是否插入成功
if (response.hasFailures()) {
System.out.println("Failed to insert data!");
} else {
System.out.println("Data inserted successfully!");
}
}
}
在上述代码中,我们使用BulkRequestBuilder对象来批量插入数据。通过prepareIndex方法设置索引名称、类型和数据源,然后添加到请求中。最后,我们执行请求并判断是否插入成功。
4. 构建查询条件
在执行查询前,我们需要根据需要构建查询条件。
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
public class ESQuery {
public static void executeQuery(TransportClient client, String indexName, String typeName) {
// 创建查询请求
SearchRequestBuilder request = client.prepareSearch(indexName);
// 设置查询类型
request.setTypes(typeName);
// 构建查询条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("field1", "value1"));
sourceBuilder.size(10); // 设置返回