簡體   English   中英

什么是 Elasticsearch 中的索引

[英]What is an index in Elasticsearch

Elasticsearch 中的索引是什么? 一個應用程序有多個索引還是只有一個索引?

假設您為某個汽車制造商構建了一個系統。 它涉及人員、汽車、備件等。您是否有一個名為制造商的索引,或者您是否有一個用於人員的索引,一個用於汽車,第三個用於備件? 有人能解釋一下嗎?

好問題,答案比人們想象的要微妙得多。 您可以將索引用於多種不同的目的。

關系指數

最簡單和最熟悉的布局克隆了您對關系數據庫的期望。 您可以(非常粗略地)將索引視為數據庫。

  • MySQL => 數據庫 => 表 => 行/列
  • ElasticSearch => 索引 => 類型 => 具有屬性的文檔

一個 ElasticSearch 集群可以包含多個Indices (數據庫),而這些Indices又包含多個Types (表)。 這些類型包含多個Documents (行),每個文檔都有Properties (列)。

因此,在您的汽車制造場景中,您可能有一個SubaruFactory索引。 在此索引中,您具有三種不同的類型:

  • People
  • Cars
  • Spare_Parts

然后,每種類型都包含對應於該類型的文檔(例如,Subaru Imprezza 文檔位於Cars類型中。該文檔包含有關該特定汽車的所有詳細信息)。

搜索查詢格式為: http://localhost:9200/[index]/[type]/[operation]

所以要檢索斯巴魯文件,我可以這樣做:

  $ curl -XGET localhost:9200/SubaruFactory/Cars/SubaruImprezza

.

記錄索引

現在,現實是索引/類型比我們在 RDBM 中使用的數據庫/表抽象靈活得多。 它們可以被認為是方便的數據組織機制,根據您設置數據的方式增加了性能優勢。

為了演示一種完全不同的方法,很多人使用 ElasticSearch 進行日志記錄。 標准格式是為每一天分配一個新索引。 您的索引列表可能如下所示:

  • 日志-2013-02-22
  • 日志-2013-02-21
  • 日志-2013-02-20

ElasticSearch 允許您同時查詢多個索引,因此這樣做不是問題:

  $ curl -XGET localhost:9200/logs-2013-02-22,logs-2013-02-21/Errors/_search=q:"Error Message"

同時搜索最近兩天的日志。 由於日志的性質,這種格式具有優勢 - 大多數日志從未被查看過,並且它們以線性時間流進行組織。 為每個日志創建索引更合乎邏輯,並提供更好的搜索性能。

.

用戶指數

另一種完全不同的方法是為每個用戶創建一個索引。 想象一下你有一個社交網站,每個用戶都有大量的隨機數據。 您可以為每個用戶創建一個索引。 您的結構可能如下所示:

  • 扎克指數
    • 愛好類型
    • 好友類型
    • 圖片類型
  • 弗雷德指數
    • 愛好類型
    • 好友類型
    • 圖片類型

請注意如何以傳統的 RDBM 方式輕松完成此設置(例如“用戶”索引,將愛好/朋友/圖片作為類型)。 然后,所有用戶都將被放入一個單一的巨大索引中。

相反,有時出於數據組織和性能原因將數據分開是有意義的。 在這種情況下,我們假設每個用戶都有大量數據,我們希望它們分開。 ElasticSearch 讓我們為每個用戶創建索引沒有問題。

@Zach 的回答對 elasticsearch 5.X 及以下版本有效。 由於 elasticsearch 6.X Type已被棄用,並將在 7.X 中完全刪除。 引用 elasticsearch 文檔:

最初,我們談到“索引”類似於 SQL 數據庫中的“數據庫”,而“類型”等同於“表”。 這是一個糟糕的類比,導致了錯誤的假設。

進一步解釋一下,SQL 中來自兩個不同表的兩個同名列可以相互獨立。 但是在彈性搜索索引中這是不可能的,因為它們由相同的 Lucene 字段支持。 因此,elasticsearch 中的“索引”與 SQL 中的“數據庫”並不完全相同。 如果索引中有任何相同的字段,它們最終會出現字段類型沖突。 為了避免這種情況,elasticsearch 文檔建議按文檔類型存儲索引

參考: 刪除映射類型

索引是一種數據結構,用於存儲字段到相應文檔的映射。 目標是允許更快的搜索,通常以增加內存使用和預處理時間為代價。

您創建的索引數量是您應該根據應用程序要求做出的設計決策。 您可以為每個業務概念創建一個索引...您可以為一年中的每個月創建一個索引...

您應該花一些時間熟悉 lucene 和 elasticsearch 概念。

看一下介紹性視頻,並在此視頻中包含一些數據設計模式

上面一個太詳細了,很短可以定義為

索引:它是不同類型文檔和文檔屬性的集合。 索引還使用分片的概念來提高性能。 例如,一組文檔包含社交網絡應用程序的數據。 來自tutorialpoints.com的回答

由於索引是每個問題的不同類型文檔的集合,因此取決於您要如何分類。

你有一個名為制造商的索引嗎? 是的,我們將保留一份與制造商有關的文件。

你有一個人的索引,一個汽車的索引,第三個備件的索引嗎? 有人能解釋一下嗎? 想想同一個制造商給很多人在路上駕駛它的實例汽車。所以根據使用次數可能會有很多指標。

如果我們深入思考,我們會發現除了第一個問題都是無效的。 Elastic-search 文檔與 SQL 文檔或 csv 或電子表格文檔有很大不同,從一個索引和強大的查詢語言,您可以創建數百萬種 CSV 樣式的數據分類文檔。

由於其極快的索引能力,我們只為一位客戶創建一個索引,然后我們根據需要創建多種類型的文檔。 例如:

使用相同型號的所有老人。或使用所有型號的一位老人。

排列是無限的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM