javaelasticsearch
『壹』 Elasticsearch:如何使用 java 對索引進行 ES|QL 的查詢
在本文中,我們將探討如何使用Java對Elasticsearch執行ES|QL查詢。為了簡化理解,所有代碼已整理並置於GitHub(鏈接:GitHub - liu-xiao-guo/elasticsearch-java-esql),這是一個Maven項目。運行項目所需的命令為:
首先,確保安裝了Elasticsearch及Kibana(參考鏈接進行安裝)。特別注意,ES|QL僅在Elastic Stack 8.11及以上版本中可用,需下載對應版本進行安裝。首次啟動Elasticsearch時,記錄輸出中的密碼用於後續配置。
准備數據集時,從先前文章下載數據集,並注意數據欄位可能與文章中描述的不同。選取10個數據樣本,並將其鏈接放置於此。克隆項目後,可見包含數據集的sample.csv文件。數據樣本如下:
數據集欄位重新命名,示例文檔如下。
配置項目時,需編輯application.conf文件以適應具體設置,包括Elasticsearch訪問地址、數據集路徑及證書。為訪問Elasticsearch,請申請API密鑰。至此,配置基本完成。
在項目中,首先根據CSV格式欄位創建Book.java類,對應數據集中的欄位。閱讀EsqlArticle.java文件,讀取application.conf配置並創建Elasticsearch訪問客戶端。在客戶端配置下,刪除或創建books索引,定義索引映射(year為short類型,ratings為浮點數,其他為text欄位)。使用Jackson CSV映射器配置文件讀取,優化文檔攝取,索引速度極快。
接下來,提取書籍信息。假設目標為['Julie Strain'],需注意在攝入文檔時未針對author進行處理。當前ES|QL版本中,所有text欄位作為keyword欄位,全文搜索尚未完全實現。查詢結果展示,通過ObjectsEsqlAdapter忽略ES|QL查詢的JSON結果,返回熟悉的書籍列表。對於習慣SQL查詢和JDBC介面的用戶,客戶端提供ResultSetEsqlAdapter,以相同方式使用,返回java.sql.ResultSet。示例中,找出Plympton PressIntl出版評分最高的書籍,結果可見於GitHub項目。
通過遵循本文所述步驟及代碼示例,您將能夠熟練使用Java對Elasticsearch執行ES|QL查詢。
『貳』 ElasticSearch JVM配置
Elasticsearch是基於Java構建的,需要至少 Java8 來運行它。只支持Oracle的Java和OpenJDK。所有Elasticsearch節點和客戶機都應該使用相同的JVM版本。
我們推薦您安裝Java1.8.0_131版本或者Java 8發行版系列的後續版本。我們推薦您使用 LTS JAVA 版本。如果使用了已知的糟糕的Java版本,Elasticsearch將拒絕啟動。
Elasticsearch將使用的Java版本可以通過設置JAVA_HOME環境變數進行配置。
默認情況下,Elasticsearch告訴JVM使用最小和最大大小為1 GB的堆。 在轉移到生產環境時,重要的是配置堆大小,以確保Elasticsearch有足夠的可用堆。
Elasticsearch將通過Xms(最小堆大小)和Xmx(最大堆大小)設置分配在jvm.options文件中指定的整個堆。
這些設置的值取決於伺服器上可用RAM的數量。好的經驗法則是:
顯示啟用了從零開始的壓縮oops而不是:
下面是如何通過jvm.options文件設置堆大小的例子:
還可以通過環境變數設置堆大小。這可以通過注釋掉jvm.options文件中的Xms和Xmx設置來實現並通過ES_JAVA_OPTS設置這些值:
注意: 為Windows服務配置堆與上述配置不同。Windows服務最初填充的值可以如上配置,但在安裝服務之後會有所不同。有關更多細節,請參閱 Windows服務文檔 。
默認情況下,Elasticsearch配置JVM將堆從內存溢出異常轉儲到默認數據目錄(/var/lib/elasticsearch是針對RPM和Debian包發行版的,Elasticsearch安裝根目錄下的data目錄是針對tar和zip存檔發行版的)如果此路徑不適合接收堆轉儲,則應修改條目 -XX:HeapDumpPath=… 在jvm.options文件中。如果指定目錄,JVM將根據運行實例的PID為堆轉儲生成一個文件名。如果指定的是固定文件名而不是目錄,那麼當JVM需要對內存溢出異常執行堆轉儲時,文件必須不存在,否則堆轉儲將失敗。
默認情況下,Elasticsearch啟用GC日誌。這些都是在jvm.options中配置的和默認設置到與Elasticsearch日誌相同的默認位置。默認配置每64 MB旋轉日誌一次,最多可以消耗2 GB的磁碟空間。
默認情況下,Elasticsearch配置JVM將致命錯誤日誌寫入默認日誌目錄(/var/log/elasticsearch是RPM和Debian包發行版的,Elasticsearch安裝根目錄下的logs目錄是針對tar和zip存檔發行版的)。這些日誌是JVM遇到致命錯誤(例如,分割錯誤)時生成的。如果這個路徑不適合接收日誌,您應該在jvm.options文件中修改條目 -XX:ErrorFile=… 為一個替代路徑。