日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

适用于Java开发人员的Elasticsearch:Elasticsearch生态系统

發布時間:2023/12/3 windows 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 适用于Java开发人员的Elasticsearch:Elasticsearch生态系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文是我們學院課程的一部分,該課程的標題為Java開發人員的Elasticsearch教程 。

在本課程中,我們提供了一系列教程,以便您可以開發自己的基于Elasticsearch的應用程序。 我們涵蓋了從安裝和操作到Java API集成和報告的廣泛主題。 通過我們簡單易懂的教程,您將能夠在最短的時間內啟動并運行自己的項目。 在這里查看 !

1.簡介

在本教程的最后一部分中,我們將環顧四周,學習Elasticsearch如何完美地融入Java生態系統并激發許多有趣的項目。 說明這一點的最好方法之一是看一下Elasticsearch和Hibernate框架的結合,這是Java開發人員中管理持久層的一種極受歡迎的選擇。

目錄

1.簡介 2. Elasticsearch for Hibernate用戶 3.彈性堆棧:全部使用 4.使用插件增強Elasticsearch 5。結論

另外,在最后,我們將瀏覽一整套非常流行的應用程序套件,稱為Elastic Stack ,以及您可以使用它做什么。 盡管它遠遠超出了Java應用程序的范圍,但很難高估它為現代,高度分布式的軟件系統提供的價值。

2. Elasticsearch for Hibernate用戶

幾乎不可能找到沒有聽說過Hibernate框架的Java開發人員。 另一方面,很少有開發人員知道在Hibernate框架下隱藏了很多項目,其中一個是名為Hibernate Search的真正瑰寶。

Hibernate Search透明地為您的對象建立索引,并提供快速的常規,全文本和地理位置搜索。 易于使用和易于集群是核心。 – http://hibernate.org/search/

Hibernate Search最初是Hibernate和Apache Lucene之間的一個簡單粘合層,用于提供一組非常有限的受支持后端來管理搜索索引。 但是,隨著最近發布的Hibernate Search 5.7.0最終版本以及成熟的Elasticsearch支持(盡管仍帶有experimental標簽),情況正在發生變化。 實際上,這意味著,如果您的持久層是由Hibernate管理的,那么通過插入Hibernate Search,您可以使用全文搜索功能來充實您的數據模型,而所有這些功能都由Elasticsearch支持。 聽起來令人興奮,對不對?

為了了解事物的工作原理,讓我們看一下從Book類開始,以裝飾有Hibernate Search批注的JPA實體表示的catalog數據模型。

@Entity @Table(name = "BOOKS") @Indexed(index = "catalog") public class Book {@Id@Field(name = "isbn", analyze = Analyze.NO)private String id;@Field@Column(name = "TITLE", nullable = false)private String title;@IndexedEmbedded(depth = 1)@ElementCollectionprivate Set categories = new HashSet<>(); @Field(analyze = Analyze.NO)@Column(name = "PUBLISHER", nullable = false)private String publisher;@Field@Column(name = "DESCRIPTION", nullable = false, length = 4096)private String description;@Field(name = "published_date", analyze = Analyze.NO)@Column(name = "PUBLISHED_DATE", nullable = false)@DateBridge(resolution = Resolution.DAY)private LocalDate publishedDate;@NumericField @Field(name = "rating")@Column(name = "RATING", nullable = false)private int rating;@IndexedEmbedded@ManyToManyprivate Set authors = new HashSet(); }

對于經驗豐富的Java開發人員來說,這是描述持久實體的一段熟悉的代碼,僅在頂部添加了幾個Hibernate Search注釋(如@Field , @DateBridge和@IndexedEmbedded )。 不幸的是,我們不會在這里討論它們,該主題本身值得一本完整的教程,但請隨時參考官方文檔以獲取更多詳細信息。 話雖如此,我們只繼續轉到Category類。

@Embeddable public class Category {@Field(analyze = Analyze.NO)@Column(name = "NAME", nullable = false)private String name; }

之后是Author類。

@Entity @Indexed(index = "catalog") @Table(name = "AUTHORS") public class Author {@Idprivate String id;@Field(name = "first_name", analyze = Analyze.NO)@Column(name = "FIRST_NAME", nullable = false)private String firstName;@Field(name = "last_name", analyze = Analyze.NO)@Column(name = "LAST_NAME", nullable = false)private String lastName; }

得益于Spring Framework ,尤其是Spring Boot的魔術, Hibernate和Hibernate Search的配置指向Elasticsearch作為搜索后端,就像向application.yml文件添加幾行一樣容易。

spring:jpa:properties:hibernate:search:default:indexmanager: elasticsearchelasticsearch:host: http://localhost:9200

坦白地說,您可能需要大量調整此配置以適合您的應用程序的需求,幸運的是, 官方文檔很好地涵蓋了這一部分。 每次創建,修改或刪除Book或Author類的實例時, Hibernate Search都會使Elasticsearch索引保持同步,這是完全透明的。

搜索效果如何? 好吧, Hibernate Search確實基于Apache Lucene查詢提供了自己的查詢DSL抽象層(同時留下了使用某些本機Elasticsearch功能的途徑 ),例如:

@Autowired private EntityManager entityManager;final FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);final QueryBuilder qb = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Book.class).get();final FullTextQuery query = fullTextEntityManager.createFullTextQuery(qb.bool().must(qb.keyword().onField("categories.name").matching("analytics").createQuery()).must(qb.keyword().onField("authors.last_name").matching("Tong").createQuery()).createQuery(), Book.class);final List books = query.getResultList(); ...

與Elasticsearch自己的Query DSL肯定有很多相似之處,因此您應該已經熟悉此代碼段。 但是,在您太興奮之前,與Hibernate Search和Elasticsearch集成相關的一些限制。 首先,當前Hibernate Search支持的Elasticsearch的最新版本是2.4.4 。 不錯,但是與當前的5.x版本分支相去甚遠,希望很快就能解決。 其次,確實,通過Hibernate Search API(尤其是Query DSL)公開的Elasticsearch功能的子集非常有限,但坦白地說,對于許多應用程序來說已經足夠了。

無論如何,為什么我們要首先提到休眠搜索 ? 很簡單,如果您的應用程序是基于Hibernate持久性構建的,則使用Hibernate Search可能是利用數據搜索的全文本搜索功能的最快,最便宜的方法,從而可以利用Elasticsearch的幕后知識。

3.彈性堆棧:全部使用

如果您已經遇到過神秘的ELK縮寫,并且對它的含義感到好奇,那么本節將幫助您找到答案。 ELK本質上是一捆產品,由(E)lasticsearch , (L)ogstash和(K)ibana組成 ,因此簡稱為ELK 。 最近,隨著Beats的加入, ELK成為了這個很棒的家族的新成員,現在經常被稱為Elastic Stack 。

毫無疑問, Elasticsearch是ELK的心臟和靈魂,所以讓我們談談其他產品是什么以及它們為何有用。

Kibana 允許您可視化 Elasticsearch 數據并瀏覽 Elastic Stack ,因此您可以執行任何操作,從了解為什么在凌晨2:00進行分頁到了解降雨可能對季度數字產生的影響。 – https://www.elastic.co/products/kibana

基本上, Kibana只是一個Web應用程序,它能夠根據您在Elasticsearch中建立索引的數據創建功能強大的圖表和儀表板。

Logstash 是一個開放源代碼的服務器端數據處理管道,可同時從多個源中提取數據,進行轉換,然后將其發送到您最喜歡的“存儲”中,例如 Elasticsearch – https://www.elastic.co/products / logstash

因此, Logstash是一個了不起的工具,能夠提取,按摩數據并將數據提供給Elasticsearch (以及眾多其他來源),以后可以使用Kibana對其進行可視化。 Beats非常接近Logstash,但功能還不那么強大。

彈性堆疊圖示

Elastic Stack非常有用并在競爭中處于領先地位的領域之一是收集和分析大量的應用程序日志。 聽起來似乎不太令人信服,為什么您需要一個如此復雜的系統來對日志文件進行尾部/ grep處理? 但是從規模上講,當您處理數百甚至數千個應用程序(例如微服務 )時,好處變得非常明顯:您突然有了一個集中的位置,所有應用程序的日志都將被流式傳輸到該位置,并可以進行搜索,分析,相關和可視化。

在不進行進一步討論的情況下,讓我們演示如何配置典型的Spring Boot應用程序以將其日志發送到Logstash , Logstash將按原樣將其轉發到Elasticsearch ,而無需應用轉換。 首先,我們需要將Logstash安裝為Docker容器或僅在本地計算機上運行 , 官方文檔非常好地介紹了安裝步驟。

我們唯一需要告訴Logstash的地方是通過logstash.conf配置文件從何處獲取日志(使用input plugins )以及將經過logstash.conf日志發送至何處(使用output plugins )。

input {tcp {port => 7760} }output {elasticsearch {hosts => [ "localhost:9200" ]} }

Logstash支持的輸入和輸出插件的數量驚人。 為了使示例非常簡單,我們將通過TCP套接字輸入插件傳遞日志,并使用Elasticsearch輸出插件直接轉發給Elasticsearch 。

看起來不錯,但是如何將日志從Java應用程序發送到Logstash ? 有很多方法可以做到這一點,最簡單的方法可能就是利用日志記錄框架的功能。 如今,大多數Java應用程序都依賴于出色的Logback框架,并且社區已經實現了專用的Logback編碼器 ,可與Logstash一起使用。

您只需要在您的項目中包括一個額外的依賴項,就像我們在這里所做的那樣,例如使用Apache Maven :

<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>4.9</version> </dependency>

然后將Logstash附加程序添加到您的logback.xml配置文件中。 需要注意的是,有幾個可用的附加程序,我們感興趣的是LogstashTcpSocketAppender ,它通過TCP套接字與Logstash對話。 請注意, destination標記下的端口應與您的Logstash輸入插件配置匹配,在本例中為7760 。

<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>localhost:7760</destination><encoder class="net.logstash.logback.encoder.LogstashEncoder" /> </appender>

總的來說,這就是我們要做的! 日志將從我們的應用程序傳送到Elasticsearch ,我們可以使用Kibana儀表板對其進行瀏覽 。 在本地計算機上下載并運行Kibana時,默認情況下,Web UI可從http:// localhost:5601獲得 :

快速Kibana儀表板

簡單,簡單,強大… Elasticsearch方式。 唯一要記住的是,您最好使用相同版本的Elasticsearch , Logstash和Kibana 。 正如我們在本教程中一直使用Elasticsearch 5.2.0一樣, Logstash和Kibana也應該是5.2.0版本。

如果您已經使用或打算使用Elasticsearch , Elastic Stack只會為您提供發現和受益的有趣機會的整個領域。 而且,它會隨著每個發行版中添加的新功能而不斷得到改進和增強。

4.使用插件增強Elasticsearch

Elasticsearch很棒,但是通常命令行工具甚至Java API都不是與集群通信的最佳方法。 幸運的是, Elasticsearch從早期就以插件的形式內置了可擴展性。

目前有許多可用的插件和隨附工具,但值得一談的是其中的三個:

  • elasticsearch-head : Elasticsearch集群的Web前端
  • elasticsearch-HQ :監視,管理和查詢Elasticsearch的 Web界面
  • search-guard : Elasticsearch的安全性

elasticsearch-head本質上是Elasticsearch的完整Web界面。 您不僅可以很好地直觀地顯示索引和分片,還可以瀏覽文檔,使用搜索查詢并輕松瀏覽結果。

顯示目錄索引和集群狀態的elasticsearch-head示例

運行結構化查詢或任意查詢的功能非常有幫助,特別是如果查詢返回很多結果并且您需要一種便捷的方式來瀏覽所有結果的能力。

另一個非常有趣的是elasticsearch-HQ ,它基本上將重點放在公開有關Elasticsearch集群和節點的操作信息上。 不幸的是,在撰寫本文時, elasticsearch-HQ不支持Elasticsearch的 5.x版本分支,但是實現它的工作已經開始。

顯示目錄索引和集群狀態的Elasticsearch-HQ示例

在我們討論最后一個插件Search-guard之前 ,最好先討論一下Elasticsearch中的安全狀態。 實際上,我們最好說一下, Elasticsearch在安全性或類似方面沒有任何提供(盡管此功能以及許多其他功能可以作為Elasticsearch的商業發行使用)。 搜索衛士是社區支持的最古老的插件,它為Elasticsearch增加了很多安全功能。 如果您真的想在生產環境中運行Elasticsearch ,請務必看一看。幸運的是,它支持所有最新的Elasticsearch版本。

5。結論

在這一部分中,“面向Java開發人員的Elasticsearch”系列已接近邏輯尾聲。 在本教程中,我們了解了Elasticsearch ,其功能以及如何使用命令行工具及其豐富的RESTful API進行通信 。 我們還討論了目前可用的各種Java API,并簡要討論了何時使用一種或另一種。 最后,我們涵蓋了一個蓬勃發展的項目(和產品)生態系統,它圍繞著Elasticsearch出現并在很大程度上依賴于它的功能。

希望您在此過程中學到了一些東西,如果您在嘗試或不嘗試Elasticsearch之前猶豫不決,則現在應該清除所有疑問。 這是一個偉大的產品,具有巨大的潛力,可以解決各種難題,并為您的想法帶來成功。

有了這個,祝您旅途順利! 此處提供了本文的完整源代碼。

翻譯自: https://www.javacodegeeks.com/2017/04/elasticsearch-java-developers-elasticsearch-ecosystem.html

總結

以上是生活随笔為你收集整理的适用于Java开发人员的Elasticsearch:Elasticsearch生态系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。