當前位置:首頁 » 數據倉庫 » java連接es資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

java連接es資料庫

發布時間: 2023-05-28 01:44:33

Ⅰ java導數據到esid重復

,代碼主要邏輯如下:

// 讀取要導入數據的文件
BufferedReader br = new BufferedReader(new FileReader(
"D:\\test\\test.txt"));
String json = null;
int count = 0;
// 開啟批量讓盯插入
BulkRequestBuilder bulkRequest = client.prepareBulk();
while ((json = br.readLine()) != null) {
bulkRequest.add(client.prepareIndex("test", "all")
.setSource(json));
// 每一千條提交一次
if (count % 1000 == 0) {
bulkRequest.execute().actionGet();
System.out.println("提交了:" + count);
}
count++;
}
bulkRequest.execute().actionGet();
System.out.println("插入完畢");
br.close();
登錄後復制

運行後發現一個問題,我100多萬條的數據,導入到es中怎麼生成了1000多萬條,而且還是在沒有完全導入的情況下
然後用小批量數據導入到es,再把這些數據導出來,發現有好多重復的數據

為什麼會重復呢,原因是在每一千條提交一次代碼這塊,第一次一千條提交了,並沒有把bulkRequest置豎滑正空,所以第二次提交的時候,會提交兩千條,包括第一次已經提交的一千條,然後我們自己也沒有設置_id,所以es會自動給數據生成一個_id,即使是重復的數據,搞清楚了原因,下面來說解決方法,主要有兩種:

第一種就是在提交了一千條後,對bulkRequest進行重置,因為bulkRequest並沒有重置的方法,所以可以新建一個bulkRequest,類似於重置,具體代碼如下:

// 讀取要導入數據的文件
BufferedReader br = new BufferedReader(new FileReader(
"D:\\test\\test.txt"));
String json = null;
int count = 0;
// 開啟批量插入
BulkRequestBuilder bulkRequest = client.prepareBulk();
while ((json = br.readLine()) != null) {
bulkRequest.add(client.prepareIndex("test", "all")
.setSource(json));
// 每一千條提交一次
if (count % 1000 == 0) {
bulkRequest.execute().actionGet();
//此處新建一個bulkRequest,類似於重置效果
bulkRequest = client.prepareBulk();
System.out.println("提交了:" + count);
}
count++;
}
bulkRequest.execute().actionGet();
System.out.println("插入完畢");
br.close();
登余悔錄後復制

第二種就是自己設置_id,確保每一條數據只有一個_id,這樣的話,即使數據重復了,因為_id是一樣的,所以es會進行更新,這樣的話並沒有從根源上解決數據重復的問題,只是重復數據會更新,這樣的話效率會慢,具體代碼如下:
// 讀取要導入數據的文件
BufferedReader br = new BufferedReader(new FileReader(
"D:\\test\\test.txt"));
String json = null;
int count = 0;
// 開啟批量插入
BulkRequestBuilder bulkRequest = client.prepareBulk();
while ((json = br.readLine()) != null) {
//設置_id為count
bulkRequest.add(client.prepareIndex("test", "all",
String.valueOf(count)).setSource(json));
// 每一千條提交一次
if (count % 1000 == 0) {
bulkRequest.execute().actionGet();
//此處新建一個bulkRequest,類似於重置效果
System.out.println("提交了:" + count);
}
count++;
}
bulkRequest.execute().actionGet();
System.out.println("插入完畢");
br.close();
登錄後復制

建議使用第一種方法,效率會快很多。

Ⅱ java怎麼連接到elastic search集群

package cn.test;

import java.net.InetAddress;
import java.net.UnknownHostException;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
public class ElkTest {
// private static final String CLUSTER_NAME = "cluster_name";
public static final String CLUSTER_NAME = "elasticsearch"; //實例名稱
private static final String IP = "127.0.0.1";
//private static final String IP = "192.168.0.29";
private static final int PORT = 9300; //埠
/鏈襲/1.設置集群名稱:默認是elasticsearch,並設置client.transport.sniff為true,使客戶端嗅探整個集群狀態,把集群中的其他機棚咐兄器IP加入到客戶端中
/*
//對ES1.6有效
private static Settings settings = ImmutableSettings
.settingsBuilder()
.put("cluster.name",CLUSTER_NAME)
.put("client.transport.sniff", true)
.build();
*/
//對ES2.0有效
private static Settings settings = Settings
.settingsBuilder()
.put("cluster.name",CLUSTER_NAME)
.put("client.transport.sniff", true)
.build();
//創建私有對象
private static TransportClient client;

//反射機制創建單例的TransportClient對象 ES1.6版本簡衫
// static {
// try {
// Class<?> clazz = Class.forName(TransportClient.class.getName());
// Constructor<?> constructor = clazz.getDeclaredConstructor(Settings.class);
// constructor.setAccessible(true);
// client = (TransportClient) constructor.newInstance(settings);
// client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(IP), PORT));
// } catch (Exception e) {
// e.printStackTrace();
// }
// }

//ES2.0版本
static {
try {
client = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(IP), PORT));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}

//取得實例
public static synchronized TransportClient getTransportClient(){
return client;
}

//為集群添加新的節點
public static synchronized void addNode(String name){
try {
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(name),9300));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}

//刪除集群中的某個節點
public static synchronized void removeNode(String name){
try {
client.removeTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(name),9300));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
public static void main(String args[]){
String index="logstash-2016.02.16";
String type="logs";
SearchResponse response=ElkTest.getTransportClient().prepareSearch(index)//設置要查詢的索引(index)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setTypes(type)//設置type, 這個在建立索引的時候同時設置了, 或者可以使用head工具查看
.setQuery(QueryBuilders.matchQuery("message", "Accept")) //在這里"message"是要查詢的field,"Accept"是要查詢的內容
.setFrom(0)
.setSize(10)
.setExplain(true)
.execute()
.actionGet();
for(SearchHit hit:response.getHits()){
System.out.println(hit.getSourceAsString());
}
}
}

Ⅲ 如何用java連接資料庫做圖書管理系統

先建個Db包察彎早
然後在裡面寫上與資料庫的連接(這個是與mysql數據鬧培庫的連接)
private static String dirver="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql://敗雀localhost:3306/test";
private static String uid="root";
private static String pwd="";
public static Connection getconn(){
Connection conn=null;
try {
Class.forName(dirver);
conn=DriverManager.getConnection(url,uid,pwd);
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("資料庫連接錯誤");
}
return conn;
}

Ⅳ java數據直接往es里存 會出現性能問題嗎

java數據直接往es里存
會出現性能問題的,存多了會造成程序運行緩慢,卡頓。

Ⅳ 在Idea中如何用java代碼與es做連接的項目

下面介紹一下如何使用Idea連接TFS伺服器,並提交變更的代碼到TFS伺服器。

一、連接TFS伺服器,並下載代碼

Figure 1

Figure 2

Figure 3 - 輸入TFS伺服器的地址,例如:http://tfs2013cn:8080/tfs/defaultcollection

Figure 4 - 選擇伺服器弊燃代租旁虛碼庫地址和本地地址

Figure 5 - 代碼下載中

Figure 6 - 選擇創建項啟培目

Figure 7

Figure 8 - 繼續, 後面幾項都是Idea導入代碼的界面,省略截屏

Figure 9 - 打開的項目

Ⅵ search-guard 安裝後 java 怎麼訪問es

能:槐遲歲法就是通過工具,將java代碼轉換成exe文件然後使用js調用exe文件這種法是可以的但旦升是沒有人這么用建議你講html文件轉成jsp,jsp中可以嵌入java代碼的然後下載個tomcat部鉛睜署一下

Ⅶ java連接資料庫的詳細步驟

JDBC:
java database connective

主要作用:
連接程序使用的資料庫

使用步驟:
1. 引入外部jar包(mysql提供的Java使用者的連接器)
工程上右鍵-->build path --> config buildpath --> liberies
-->add external jars
-->選擇對應的mysql-connectorXXXXXX.jar
看到工程上有jar文件則證明引入成功

2. 編程:
(1):注冊資料庫驅動
Class.forName("com.mysql.jdbc.Driver");
(2):創建連接
String url = "jdbc:mysql://192.168.0.243:3306/test";
String userName = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, userName, password);

(3):創建SQL信使
Statement stmt = conn.createStatement();

(4):執行SQL語句
int i = stmt.executeUpdate("insert into employee values ('10070004', '張三豐', 1, '2005-05-23', 0, 1001, '2007-02-02', 200)");
(5):異常捕獲、關閉資源

Ⅷ java操作es獲取索引存儲大小

150GB。
在ES中,索引是一組文檔的集合,由於ES是個分布式的搜索引擎,索引會被分解成不同部分,索引大小為150GB。
Java指編程語言,Java具有大部分編程語言所共有的一些特徵,被特意設計用於互聯網的分布式環境,使用Java編寫的應用程序,既可以在一台單獨的電腦上運行,也可以被分布在一個網路的伺服器端和客戶端運行。

Ⅸ 用Java做一個簡單的界面,連接到資料庫(SQL Server),大家有沒有具體的例子,跪求解答

你可以做一個下拉框,選項有教師和學生,不過這個的話,一般是通過許可權來控制的,這樣教師和學生登錄之後,看到的菜單就不一樣了。
JDBC連接資料庫
•創建一個以JDBC連接資料庫的程序,包含7個步驟:
1、載入JDBC驅動程序:
在連接資料庫之前,首先要載入想要連接的資料庫的驅動到JVM(Java虛擬機),
這通過java.lang.Class類的靜態方法forName(String className)實現。
例如:
try{
//載入MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅動程序類 ,載入驅動失敗!");
e.printStackTrace() ;
}
成功載入後,會將Driver類的實例注冊到DriverManager類中。
2、提供JDBC連接的URL
•連接URL定義了連接資料庫時的協議、子協議、數據源標識。
•書寫形式:協議:子協議:數據源標識
協議:在JDBC中總是以jdbc開始
子協議:是橋連接的驅動程序或是資料庫管理系統名稱。
數據源標識:標記找到資料庫來源的地址與連接埠。
例如:(MySql的連接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字元集。如果characterEncoding設置為
gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字元編碼方式。
3、創建資料庫的連接
•要連接資料庫,需要向java.sql.DriverManager請求並獲得Connection對象,
該對象就代表一個資料庫的連接。
•使用DriverManager的getConnectin(String url , String username ,
String password )方法傳入指定的欲連接的資料庫的路徑、資料庫的用戶名和
密碼來獲得。
例如:
//連接MySql資料庫,用戶名和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("資料庫連接失敗!");
se.printStackTrace() ;
}
4、創建一個Statement
•要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3
種類型:
1、執行靜態SQL語句。通常通過Statement實例實現。
2、執行動態SQL語句。通常通過PreparedStatement實例實現。
3、執行資料庫存儲過程。通常通過CallableStatement實例實現。
具體的實現方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
5、執行SQL語句
Statement介面提供了三種執行SQL語句的方法:executeQuery 、executeUpdate
和execute
1、ResultSet executeQuery(String sqlString):執行查詢資料庫的SQL語句
,返回一個結果集(ResultSet)對象。
2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或
DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的
語句。
具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ; 法長瘁短誆的搭痊但花
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、處理結果
兩種情況:
1、執行更新返回的是本次操作影響到的記錄數。
2、執行查詢返回的結果是一個ResultSet對象。
• ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些
行中數據的訪問。
• 使用結果集(ResultSet)對象的訪問方法獲取數據:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比較高效
}
(列是從左到右編號的,並且從列1開始)
7、關閉JDBC對象
操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲
明順序相反:
1、關閉記錄集
2、關閉聲明
3、關閉連接對象
if(rs != null){ // 關閉記錄集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 關閉聲明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 關閉連接對象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}

Ⅹ java中如何直接讀取es語言

Elasticsearch不是java語言開發的,所以必模液辯須要通過api才能調用。你可以看看有沒有第三方包旦缺可以直接埋鋒操作。