目录
ElasticSearch 相关操作
在java连接 elasticSearch 过程中,可通过JDBC(org.elasticsearch.xpack.sql.jdbc.EsDriver)连接查询,但JDBC的查询等操作需要白金(或试用(Trial))许可证才可以,如果elasticSearch许可证为 基础(Basic),则只能通过elasticSearch相关的Client进行操作。
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>x-pack-sql-jdbc</artifactId>
<version>7.10.0</version>
</dependency>
1. 加载JDBC驱动
private static final String DRIVER = "org.elasticsearch.xpack.sql.jdbc.EsDriver";
static {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
System.out.println("驱动加载失败" + e);
}
}
2. 获取JDBC连接
/**
* 获取连接1
*/
public Connection getConnection(String ip, String port, String userName, String password) throws SQLException {
String url = "jdbc:es://" + ip + ":" + port + "/";
return DriverManager.getConnection(url, userName, password);
}
/**
* 获取连接2
*/
public static Connection getConnection(String ip, Integer port, String userName, String password) throws SQLException {
String address = "jdbc:es://" + ip + ":" + port + "/";
Properties connectionProperties = new Properties();
connectionProperties.put("user", userName);
connectionProperties.put("password", password);
return DriverManager.getConnection(address, connectionProperties);
}
3. 获取索引名称(JDBC)
/**
* 获取数据库索引名称
*
* @param connection
*/
public static void getTableName(Connection connection) {
// 1、连接数据库, 控制台打印出这个数据库里面所有的表
ResultSet resultSet = null;
try {
DatabaseMetaData databaseMetaData = connection.getMetaData();
// 可用可不用
String[] types = {
"TABLE"};
resultSet = databaseMetaData.getTables(connection.getCatalog(), null, "%", types);
while (resultSet.next()) {
//获取表名
System.out.println("database : " + resultSet.getString(1) + " ==== table : " + resultSet.getString(3));
}
} catch (SQLException e) {
System.out.println("获取数据库表名失败:" + e);
} finally {
close(resultSet);
}
}
4. 获取ElasticSearchClient
/**
* 获取HttpHost数组
*
* @return ttpHost[]
*/
public static HttpHost[] toHttpHost(String hosts) {
if (StringUtils.isEmpty(hosts)) {
throw new RuntimeException("invalid elasticsearch configuration");
}
String[] hostArray = hosts.split(StringPool.COMMA);
HttpHost[] httpHosts = new HttpHost[hostArray.length];
HttpHost httpHost;
for (int i = 0; i < hostArray.length; i++) {
String[] strings = hostArray[i