1. 程式人生 > >介紹elasticsearch中Mapping

介紹elasticsearch中Mapping

這篇檔案介紹elasticsearch中mapping特性。我們會定義其關鍵術語,並進一步介紹mapping是什麼,什麼時候指定它,其結構是怎樣的以及如何應用到我們的資料中。

Schema是什麼

schema翻譯為模式
mapping 翻譯為對映

模式是一個或多個欄位的描述,描述文件的型別以及如何處理文件的不同欄位。

elasticsearchschema就是mapping,其用於描述在json文件中的欄位和資料型別,以及它們在Lucene索引中如何進行索引。因此,在elasticsearch術語中,我們通常將該模式稱為對映

在概念上,elasticsearch伺服器包含零個或多個索引。一個索引包含零個或多個型別,其型別又包含零個或多個文件。換句話說:一個文件有一個標識,會屬於一個型別,其又會屬於一個索引。下圖顯示在索引my_index

中,my_type型別中的文件ABXY.

Indexes,types and documents

上圖將型別名為another_type和索引名為another顯示出來是為了強調elasticsearch多庫的,其意味著我們可以在單個伺服器上儲存多個索引和多個型別。

elasticsearch文件和相關資料中,我們常常看到術語mapping type, 其通常表示在索引內的type名稱,例如上圖中的my_typeanother_type
當我們在elasticsearch中說到型別,其通常是型別的定義。不要和每個mapping中的type關鍵字混淆了,該關鍵字決定了文件中的資料如何由elasticsearch來處理。

什麼時候使用自定義的對映

elasticsearch具有無模式的能力,這意味著文件在沒有明確提供模式下也能被索引。

如果你不指定對映,則在索引期間檢測到文件中的新欄位時,elasticsearch將預設會動態生成一個動態對映。然而,這個動態生成的對映需要注意:

  1. 檢測到的型別可能不正確
  2. 可能會導致不必要的重複。(特別是_source_all欄位)。
  3. 對於索引和搜尋會使用預設的分詞器和設定。

例如:時間戳在json中常常表示為long,但是elasticsearch可能不能將其檢測為date欄位,從而阻止了date過濾器和facetsthe date histogram facet)正常工作。

明確指定模式,我們可以避免上述的問題。

對映看起了像什麼?

對映通常作為json提供給elasticsearch,是一種分層結構格式,root是對映應用的型別名稱。

Mapping Root

在對映root級別,在型別名稱下,elasticsearch支援幾個特殊欄位來配置如何處理不是要釋出文件部分的元資料,例如:其typeidsizefallback _all field。有關支援的特殊欄位的列表,請參閱Mapping Reference右側列表中的fields

root 物件還可以有其他額外的屬性,它可以為型別設定預設索引和搜尋分析器,在型別中的日期會自動解析為日期的格式以及動態模板 - 我們將在以後的文章中重新討論這些屬性。除了上述領域,巢狀json文件的root基本和其他對映基本之間沒有區別。

Hierarchical Levels 層次級別

每個層次通常定義一個properties設定,對層次中的文件的key進行對映。這個結構是分層的,意味著每個級別下的葉子節點可能包括其子值的properties設定。為了更好理解,思考下面的文件和其對映:
Document:

{
    "name": {
        "first": "John"
    }
}

Mapping:

{
  "my_type" : {
    "properties" : {
      "name" : {
        "properties" : {
          "first" : {
            "type" : "string"
          }
        }
      }
    }
  }
}

雖然對映比文件稍微複雜點,對映的結果清晰的遵循文件的結構,並添加了properties節點。

上面層次:
第一層:key為name這層,歸屬type
第二層:key為first這層,歸屬第一層。
所以在設定對映關係時,第一層是被my_type包裹著,第二層是被name這層包裹著,其中它們都是要用properties欄位包裹著,表示設定的對映關係。

The type Key

在上面的例子中,我們看到文件欄位name.first與其他結構的區別在於它定義了一個type。在葉子層次中使用的type鍵是為了告訴elasticsearch在文件給定(相同)的層次中如何處理該欄位。如果type鍵被省略, 如非葉子層次型別情況,elasticsearch會假設其為object(物件)型別。

string型別是內建的核心型別之一,elasticsearch支援許多不同的型別,例如:geo_pointip,其可以分別用於有效索引和搜尋地理位置和IPv4地址。使用multi_field型別,我們甚至可以將單個文件欄位索引到多個虛擬欄位中。我們將在未來的文章中詳細說明。

如何提供Mapping

這裡有兩種方式來提供mappingelasticsearch
最常見的方式是在建立索引時:

curl -XPOST ...:9200/my_index -d '{
    "settings" : {
        # .. index settings
    },
    "mappings" : {
        "my_type" : {
            # mapping for my_type
        }
    }
}'
$ curl -XPUT 'http://localhost:9200/my_index/my_type/_mapping' -d '
{
    "my_type" : {
        # mapping for my_type
    }
}
'

注意:該型別(my_type)在請求路徑和請求體中是相同的。
API使我們能夠更新現有索引的對映,但是存在潛在的衝突和一些限制。新定義的對映可以新增到現有對映中,並且已有的型別可能會更新他們的配置,但是改變型別將會發生衝突並且是不可接受的。然而可以通過將ignore_conflicts=true作為引數傳遞給Mapping API,但這樣做不能保證產生預期的結果,因為已經索引的文件在使用新對映時不會自動重新索引(類似於插入操作)文件。

因此,在大多數情況下,建議使用Put Mapping API在建立索引時,指定對映。

結束語

相關推薦

介紹elasticsearchMapping

這篇檔案介紹elasticsearch中mapping特性。我們會定義其關鍵術語,並進一步介紹mapping是什麼,什麼時候指定它,其結構是怎樣的以及如何應用到我們的資料中。 Schema是什麼 schema翻譯為模式 mapping 翻譯為對映 模式是

elasticsearchmapping的可設定的屬性

mappings : 在index(庫)下建立時使用,下面可以有多個mapping 以下資料結構主要針對每個mapping進行說明: 一級屬性 二級屬性 三級屬性 說明 dynamic &nbs

elasticsearchmapping全解實戰

目錄 Mapping簡介 Mapping Type 分詞器最佳實踐 欄位型別 text 型別 keyword 型別 date型別 object型

elasticsearch的欄位型別/mapping引數

查看錶結構的定義 GET /testindex/_mapping GET /testindex/testtable/_mapping (一)核心資料型別: (1)string: 預設會被分詞 string型別包括:text 和 keyword 一個完整示例如下 :

對映型別(mapping type)從Elasticsearch移除

原文:https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html 注意:在Elasticsearch6.0.0或者或者更新版本中建立的索引只會包含一個對映型別(

elasticsearch核心知識---49.ESmapping root object _source _all _store _index關鍵字理解

關於_source  _all   _store  _index 這四個關鍵字  在這篇文章中非常詳細點選開啟連結1.root object就是某個type對應的mapping json,包括了properties,metadata(_id,_source,_type),se

第十二篇 elasticsearchmapping透徹理解

首先插入幾條資料,讓es自動為我們建立一個索引 PUT /website/article/1 { "post_date": "2017-01-01", "title": "my first article", "content": "this

ElasticSearchJava Scroll API介紹

原文地址:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-scrolling.html Using scrolls in Javaedit

elasticsearch給已存在的mapping增加新欄位並賦值

es中建立後的mapping不可修改,但是可以新增新欄位 新增新欄位: PUT /my_index/_mapping/my_type { "properties": { "new_field_name": { "type"

ElasticSearchsearch after處理深分頁介紹

原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.5/search-request-search-after.html Search Afteredit Pagination o

Elasticsearch的分詞介紹

1、概述 在我們初次使用Elasticsearch查詢的時候,有時會很困惑,為什麼我儲存的一段String資料,卻查詢不到?為什麼輸入了漢語單詞,只能一個字一個字的匹配?等這些都與是否分詞、使用什麼分詞器有關。 1.1 分詞概念 首先說說什麼是分詞器吧!

ElasticSearch Mapping

> **公號:碼農充電站pro** > **主頁:** ### 1,ES 中的 Mapping ES 中的 [Mapping](https://www.elastic.co/guide/en/elasticsearch/reference/7.10/mapping.html) 相當於傳統資料庫中的**表定

elasticsearch的幾個概念總結

查詢 article ase con 總結 diff 返回 cse nan 1、Geo spatial search : 地理空間搜索,可以在搜索查詢中指定的某一距離內查找所要的內容。也可以返回以當前為圓心,逐漸添加圓的半徑。直到找到所匹配到的內容。

介紹hadoop的hadoop和hdfs命令

命令行 註意 property 密碼 編輯 format gety node job 有些hive安裝文檔提到了hdfs dfs -mkdir ,也就是說hdfs也是可以用的,但在2.8.0中已經不那麽處理了,之所以還可以使用,是為了向下兼容. 本文簡要介紹一下有關的命令,

D3js-API介紹

模擬 數組的數組 median factor from position 依據 tracking -a JavaScript可視化圖表庫D3.js API中文參考,d3.jsapi D3 庫所提供的全部 API 都在 d3 命名空間下。d3 庫使用語義版本

elasticsearchmapping和analysis

repl 個推 field mat parent ppi 逗號 rip lin 轉發自:http://blog.csdn.net/hzrandd/article/details/47128895 分析和分析器 分析(analysis)是這樣一個過程: 首先,表征化一

ElasticSearch master、data 和 client 節點

表示 elastic pan 問題 請求 tro arch 兩個 服務器   在生產環境下,如果不修改elasticsearch節點的角色信息,在高數據量,高並發的場景下集群容易出現腦裂等問題。   默認情況下,elasticsearch 集群中每個節點都有成為主節點的資格

簡單介紹 C++變量的引用

簡單 變量 9.png -1 技術分享 png log 介紹 .com 簡單介紹 C++中變量的引用

介紹nodejs的path模塊的幾個方法

rsync wro 不同 osi {} tip multi 發現 post webpack中常用的: var path = require(‘path‘) 是nodejs中的path模塊,介紹一下webpack中常用的幾個path模塊的方法: 應用node環境的時候,這個p

Elasticsearchdocument的基礎知識

元數據 不同 一個 返回 document elastics nbsp test 唯一標識 寫在前面的話:讀書破萬卷,編碼如有神-------------------------------------------------------------------- 參考內容