java操作ES整個流程介紹

2021-01-10 侃侃網際網路技術

一 準備工作

下載elasticsearch-6.7.0和展示ES數據的界面工具elasticsearch-head-master,本人電腦已安裝IntelliJ IDEA 2019.3 x64的java工具。

簡單點,我們直接按默認配置學習。

windows直接點擊elasticsearch.bat啟動ES。

圖1

使用npm run start啟動elasticsearch-head-master,然後就可以從界面上查看ES數據。

圖2
圖3
圖4

二 java操作入庫ES數據

1、引入elasticsearch包

<!-- ElasticSearch連接-->

<dependency>

<groupId>io.searchbox</groupId>

<artifactId>jest</artifactId>

<version>${searchbox.version}</version>

</dependency>

<groupId>org.elasticsearch</groupId>

<artifactId>elasticsearch</artifactId>

<version>${elasticsearch.version}</version>

2、將庫表裡的數據導入部分到ES上

public void testSave() throws IOException {

//對象 ArticleHomeDto是要存入ES裡的欄位設置

ArticleHomeDto dto = new ArticleHomeDto();

dto.setSize(50);

dto.setTag("__all__");

//從mysql資料庫裡查出要存入ES的內容

List<ApArticle> apArticles = apArticleMapper.loadArticleListByLocation(dto, (short)0);

//開始循環入庫到ES

for (ApArticle apArticle : apArticles) {

ApArticleContent apArticleContent = apArticleContentMapper.selectByArticleId(apArticle.getId());

EsIndexEntity esIndexEntity = new EsIndexEntity();

esIndexEntity.setChannelId(new Long(apArticle.getChannelId()));

esIndexEntity.setId(apArticle.getId().longValue());

esIndexEntity.setContent(ZipUtils.gunzip(apArticleContent.getContent()));

esIndexEntity.setPublishTime(apArticle.getPublishTime());

esIndexEntity.setStatus(new Long(1));

esIndexEntity.setTag("article");

esIndexEntity.setTitle(apArticle.getTitle());

Index.Builder builder = new Index.Builder(esIndexEntity);

builder.id(apArticle.getId().toString());

builder.refresh(true);

Index index = builder.index(ESIndexConstants.ARTICLE_INDEX).type(ESIndexConstants.DEFAULT_DOC).build();

JestResult result = jestClient.execute(index);

if (result != null && !result.isSucceeded()) {

throw new RuntimeException(result.getErrorMessage() + "插入更新索引失敗!");

}

最終入庫到ES內容如下:

圖5

三 ES上查看操作數據

1、基本查詢:查詢某個欄位是否包含某內容,match

圖6

2、複合查詢:查詢某條數據

圖7

3、複合查詢:查詢包含關鍵信息的數據,查詢包含「極客頭條」的數據

圖8

4、複合查詢:查詢包含關鍵信息的數據,只要滿足一條即可查出來

圖9

5、複合查詢:查詢包含關鍵信息的數據,must和should混合使用

圖10

四總結

本節簡單介紹了windows環境下如何安裝ES,如何用java導入數據到ES,並且在ES界面上查詢ES裡的數據,同樣我們也可以在ES上操作數據,用put命令實現增刪改操作。

相關焦點

  • JAVA 經典面試題:ES如何做到億級數據查詢毫秒級返回?
    每臺機器給 es jvm heap 是 32G,那麼剩下來留給 filesystem cache的就是每臺機器才 32G,總共集群裡給 filesystem cache 的就是 32 * 3 = 96G 內存。而此時,整個磁碟上索引數據文件,在 3 臺機器上一共佔用了 1T 的磁碟容量,es 數據量是 1T,那麼每臺機器的數據量是 300G。這樣性能好嗎?
  • Java NIO 基礎知識
    前面說的緩存區操作看似簡單,但是具體到底層細節,還是蠻複雜的。下面的描述,我儘量保證準確,但是不會展開得太具體,因為虛擬內存還是蠻複雜的,要完全介紹清楚,恐怕需要很大的篇幅,如果讀者對這方面的內容感興趣的話,建議讀者尋找更加專業全面的介紹資料,如《深入理解計算機系統》。
  • Java字符串地查找操作
    在一個字符串中查找字符或子串是經常使用的操作。String類提供了兩種查找字符串的方法,分別是indexOf()和lastIndexOf(),這兩種方法都返回待查找字符或子串在字符串的起始索引位置。代碼如下:/** * @Title: StringSearchSample.java * @Packageunit * @Description: Java基礎知識課程案例* @author編程訓練營 * @date* @versionV1.0 */ packageunit;
  • Java基礎-instanceof用法揭秘
    Java有一個 instanceof 操作符(關係操作符)可以做這件事。public static void main(String[] args) {String s = "Hello World!";System.out.println(s instanceof String);}列印出結果:true可是如果你的那個誰不存在呢?
  • Java之Random類的簡單介紹
    各位小夥伴這次小編要介紹的是Random類,它是用來形成隨機數字的,使用Random有三個步驟,與之前講的Scanner類差不多。第一步,導包:import java.util.Random第二步,創建:Random a=new Random();小括號是可以留空的第三步,使用:如果要獲取一個隨機數int數字(範圍是int所有範圍,有正負兩種):int num=a.nextInt();為了方便大家的理解,小編就先粘幾行代碼,是一個比較簡單的猜數字小遊戲,代碼如下:
  • Java基礎教程:java反射機制教程
    這時候java語言在設計的時候為我們提供了一個機制,就是反射機制,他能夠很方便的去解決我們的問題。 二、深入分析java反射機制 1、獲取Class類 在java中萬事萬物皆對象,Useruser=newUser()一行代碼我們知道了user是User類的實例對象,通過Studentstu=newStudent()我們知道了
  • Java程式設計師必備基礎:Java代碼是怎麼運行的?
    java 代碼運行主要流程 本文主要講解流程如下:java源文件編譯為class字節碼 類加載器把字節碼加載到虛擬機的方法區。
  • 堅果pro2s中設置息屏時間的具體操作流程介紹
    下面就為各位帶來了堅果pro2s中設置息屏時間的具體操作流程介紹。上文就是小編為你們帶來的堅果pro2s中設置息屏時間的具體操作流程介紹,你們都學會了嗎?
  • Java編程中基礎反射詳細解析
    有時會把這一整個流程統稱為類加載或類初始化。類加載指的是將類的class文件讀入內存中,並為之創建一個 java.lang.Class對象,也就是說程序使用任何類的時候,都會為其創建一個class對象。
  • 電阻電焊機的操作流程
    電阻電焊機在車身的焊接中具有很重要的作用,它快捷方便,使焊接更加牢固,美觀,而且焊接後的焊點不需要進行打磨,唯一的不足就是只能焊接車身邊緣部分,那麼電阻電焊機具體怎麼操作呢?接下來小編就給大家介紹一下詳細的操作流程。
  • MMM全套操作流程
    確認了以後,點左下角的保存,然後刷新頁面 (三)第三步就是MMM添加收款帳號操作流程 匹配成功後,就是打款和上傳截圖的操作。以上介紹了從註冊設置帳號掛單的流程,下面是介紹匹配成功後如何給別人打款以及我們自己提現的流程:
  • java基礎反射Reflection簡單介紹
    缺點性能開銷 大- 反射操作的性能要比非反射操作的性能要差,應該在性能敏感的應用程式中頻繁調用的代碼段中避免。內部曝光 - 由於反射允許代碼執行在非反射代碼中非法的操作,例如訪問私有欄位和方法,所以反射的使用可能會導致意想不到的副作用,這可能會導致代碼功能失常並可能破壞可移植性。反射代碼打破了抽象,因此可能會隨著平臺的升級而改變行為。
  • java軟體工程師的這些要求你有嗎?
    如今java是IT界數一數二的語言,許多程式設計師都想要成為java軟體工程師,那大家知道企業對於java軟體工程師的技術要求有哪些嗎?java軟體工程師的技術要求一.java技術要求:1.具有良好的Java語言基礎,面向對象編程基礎2.熟悉Struts、Hibernate、Spring等主流技術框架3.熟悉XML解析、Excel導出、文件上傳、發送E-mail等常見業務的實現二.資料庫技術要求1.掌握、運用SQLServer
  • 一起學JAVA——數組和函數
    之前我們介紹了java的數據類型、變量、流程控制等內容。今天我們高級數據類型——數組以及函數的作用。函數(方法)函數的定義函數就是一段有名字的代碼,可以完成某一特定功能。方法(函數)是java的最小代碼重用單位,方法(函數)是為了重用代碼。方法不能嵌套方法,不能在一個方法內部定義另外一個方法。可以在一個方法內部調用另外一個方法。
  • VSCode 6 月 Java 更新,編輯器就該有編輯器的樣子
    最近微軟高級項目經理 Xiaokai He 發布了一篇文章,介紹了 VSCode 6 月更新中針對 Java 的更新內容。更新中帶來了不少新特性,主要涉及代碼快速操作、性能提高和調試器新功能等內容。getters 與 setters 增強getters 與 setters 操作得到增強,現在除了為所有成員變量批量生成 getter 和 setter 之外,如果類具有多個欄位,那麼代碼操作還將提示快速選擇框,讓開發者選擇目標欄位以生成訪問者方法。
  • Java之File類的構造方法
    各位小夥伴們大家好,在之前的文章中,小編介紹了Java之File類的簡單介紹,File類的靜態成員變量,這次小編要介紹的是File類的構造方法小編先來介紹一下構造方法1:File(String pathname)通過給定路徑名字符串轉換為抽象路徑名來創建一個新File實例參數:String pathname:字符串的路徑名稱路徑可以是以文件結尾
  • Java8 lambda表達式語法
    本文是該系列的第一篇,主要介紹Java8對屌絲碼農最有吸引力的一個特性—lambda表達式。java8的安裝工欲善其器必先利其器,首先安裝JDK8。過程省略,大家應該都可以自己搞定。但是有一點這裡強調一下(Windows系統):目前我們工作的版本一般是java 6或者java 7,所以很多人安裝java8基本都是學習為主。這樣就在自己的機器上會存在多版本的JDK。
  • 淺談Java中的幾種隨機數
    最明顯的,也是直觀的方式,在Java中生成隨機數隻要簡單的調用:java.lang.Math.random() 在所有其他語言中,生成隨機數就像是使用Math工具類,如abs, pow, floor, sqrt和其他數學函數。大多數人通過書籍、教程和課程來了解這個類。一個簡單的例子:從0.0到1.0之間可以生成一個雙精度浮點數。
  • 如何使用JAVA反射/JAVA反射實例
    > c3 = null ;  // 指定泛型  try{   // 以下的操作形式是在開發中最常用的一種形式   c1 = Class.forName("com.test.instancedemo.X") ;  }catch(ClassNotFoundException e){   e.printStackTrace() ;  }  c2 = new X().getClass() ;  //
  • Java反射機制深入詳解
    反射是java語言的一個特性,它允程序在運行時(注意不是編譯的時候)來進行自我檢查並且對內部的成員進行操作。例如它允許一個java的類獲取他所有的成員變量和方法並且顯示出來。Java 的這一能力在實際應用中也許用得不是很多,但是在其它的程序設計語言中根本就不存在這一特性。例如,Pascal、C 或者 C++ 中就沒有辦法在程序中獲得函數定義相關的信息。