Elasticsearch系列---初識mapping
概要
本篇簡單介紹一下field資料型別mapping的相關知識。
mapping是什麼?
前面幾篇的實戰案例,我們向Elasticsearch索引資料時,只是簡單地把JSON文字放在請求體裡,至於JSON裡的field型別,儲存到ES裡是什麼型別,中間是怎麼做的對映,這個對映過程,就是mapping要解決的問題。
mapping簡單來說,就是解決JSON文字內容到field型別對映關係的定義。將時間域視為時間型別,數字視為數字型別,字串識別為全文或精確值字串,這個識別的過程,叫做mapping。
Elasticsearch支援的簡單域型別,類似於Java的基礎資料型別,有如下幾種:
- 字串:text,keyword
- 整數 : byte, short, integer, long
- 浮點數: float, double
- 布林型: boolean
- 日期: date
當Elasticsearch收到JSON基本資料型別內容時,使用如下規則進行型別對映:
| JSON type | domain type
| :---- | :--: | -----: |
| 布林型: true 或者 false | boolean
| 整數: 123 | long
| 浮點數: 123.45 | double
| 日期格式的字串: 2014-09-15 | date
| 字串: love you | text
檢視對映
每個索引都可以通過/_mapping查詢各個field的對映結果,ES本身有自動mapping的過程,但mapping後的結果一定要仔細檢查一下。
查詢請求:
GET /music/_mapping/children
響應結果:
{ "music": { "mappings": { "children": { "properties": { "content": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "language": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } }, "fielddata": true }, "length": { "type": "long" }, "likes": { "type": "long" }, "name": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } } } }
mapping中就自動定義了每個field的資料型別,properties下面的是各個field欄位的名稱、型別等資訊,text型別的還帶一個keyword子field。
資料型別的分詞規則
index在建立時或索引資料時,如果沒有手動指定mapping資訊,Elasticsearch會用它的規則自動為我們建立type資訊,以及type對應的mapping,mapping中包含了每個field對應的資料型別,以及如何分詞等設定。
不同型別的field,有的是精確搜尋(exact value),有的是全文搜尋(full text)。
- exact value,在建立倒排索引的時候,是將整個值一起作為一個關鍵詞建立到倒排索引中的,並且大小寫敏感;
- full text,會經歷各種各樣的處理,分詞,normaliztion(時態轉換,同義詞轉換,大小寫轉換),才會建立到倒排索引中。
在一個搜尋請求過來的時候,對exact value field和full text field進行搜尋的會與當初建立倒排索引的行為保持一致;比如說exact value搜尋的時候,就是直接按照整個值進行匹配,full text query string,也會進行分詞和normalization再去倒排索引中去搜索,這樣才能達到預期的搜尋效果。
ES基本的幾種field型別,除了text是使用full text,其他的都是exact value,總結來說mapping,決定了資料型別,建立倒排索引的行為,還有進行搜尋的行為。
自定義對映
基本資料型別基本夠用,但是有些資料可能需要自定義對映,尤其是字串,string型別預設是full text,但是我們可以自己定義分詞器,不同的分詞器,會帶來不一樣的搜尋效果,string型別最重要的屬性是index和analyzer。
index
這個屬性控制字串的索引規則,有三個值可供選擇:
- true:支援索引,並且依據當前型別決定是全文搜尋還是精確匹配
- false:不索引
例如:
{
"author": {
"type": "text",
"index": true
}
}
analyzer
這個屬性控制字串使用的分詞器,在支援中文的系統裡,這個屬性經常被用到,各路分詞器大顯身手,都需要用這個屬性來指定,如:
{
"content": {
"type": "text",
"analyzer": "aliws"
}
}
測試對映
我們在建立索引之後,可以通過測試命令來檢視不同的field的對映結果,即full text型別的是否有分詞, exact value的是否原樣保留,text的內容可以隨意輸入,當把這個作用工具除錯時,可以診斷的內容的分詞情況,舉例如下:
- full text型別
GET /music/_analyze
{
"field": "content",
"text": "let me sleep"
}
結果:
{
"tokens": [
{
"token": "let",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "me",
"start_offset": 4,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "sleep",
"start_offset": 7,
"end_offset": 12,
"type": "<ALPHANUM>",
"position": 2
}
]
}
- exact value型別
GET /music/_analyze
{
"field": "content.keyword",
"text": "let me sleep"
}
結果:
{
"tokens": [
{
"token": "let me sleep",
"start_offset": 0,
"end_offset": 12,
"type": "word",
"position": 0
}
]
}
注意一個小細節:Elasticsearch在自動建立text型別時,為full text,但會自動建立一個keywork子field,這個子field是exact value型別的。
小結
本篇主要介紹了一個mapping的概念,基礎資料型別,以及檢視對映資訊和測試field對映效果的方法,測試對映效果算是一個比較有用的工具,後期實際開發中,遇到需要診斷的內容,可以用這個工具協助排查問題。
專注Java高併發、分散式架構,更多技術乾貨分享與心得,請關注公眾號:Java架構社群
相關推薦
Elasticsearch系列---初識mapping
概要 本篇簡單介紹一下field資料型別mapping的相關知識。 mapping是什麼? 前面幾篇的實戰案例,我們向Elasticsearch索引資料時,只是簡單地把JSON文字放在請求體裡,至於JSON裡的field型別,儲存到ES裡是什麼型別,中間是怎麼做的對映,這個對映過程,就是mapping要解決的
Elasticsearch系列---初識搜尋
概要 本篇主要介紹搜尋的報文結構含義、搜尋超時時間的處理過程,提及了一下多索引搜尋和輕量搜尋,最後將精確搜尋與全文搜尋做了簡單的對比。 空搜尋 搜尋API最簡單的形式是不指定索引和型別的空搜尋,它將返回叢集下所有索引的所有文件(預設顯示10條): GET /_search 響應的結果示例(有篩選,只取了一條d
【Elasticsearch 7 探索之路】(六)初識 Mapping
上一篇主要講解什麼是 URL Search 和 Request Body Search 的語法。本篇對 Mapping 的 Dynamic Mapping 以及手動建立 Mapping 進行講解。 1.什麼是 Mapping Mapping 類似資料庫中的 schema 的定義,作用如下 定義索引中的欄位
elasticsearch index 之 Mapping
splay ima 更多 trie name .post 結構 emp parser Lucene索引的一個特點就filed,索引以field組合。這一特點為索引和搜索提供了很大的靈活性。elasticsearch則在Lucene的基礎上更近一步,它可以是 no schem
elasticsearch系列(四)部署
linux .tar.gz ast 官方 hup bin arc 分享 quest linux環境 centOS6.8 本文采用tar包的方式部署es 準備jdk8的環境 5.4.0的es依賴jdk8及以上版本 下載linux版的jdk jdk-8u121-linux-x6
ElasticSearch添加mapping
log void exe replicas blog 創建 修改 index obj 1.創建索引 /** * 創建索引 * * @param indexName */public static void createIndex(String indexName) {
搜索引擎ElasticSearch系列(四): ElasticSearch2.4.4 sql插件安裝
china code als 插件 技術分享 -s fun nlp 4.0 一:ElasticSearch sql插件簡介 With this plugin you can query elasticsearch using familiar SQL syntax.
elasticsearch系列(六)備份
indices stat 必須 tor 信息 操作 accepted gui 配置 快照備份 1.創建文件倉庫 1.1 在$ELASTICSEARCH_HOME/config/elasticsearch.yaml中增加配置 #這個路徑elasticsearch必須有權限訪問
elasticsearch系列(七)java定義score
集群 scrip image search 支持 name dsr 計算方法 dynamic 概述 ES支持groovy 和 java兩種語言自定義score的計算方法,groovy甚至可以嵌套在請求的參數中,有點厲害,不過不在本篇討論範圍。 如何用自定義的java代碼來定
ElasticSearch 6.2 Mapping參數說明
ping 接受 value led 說明 ear 新增 rst type 背景: 由於本人使用的是6.0以上的版本es,在使用發現很多中文已過時。ES6.0以後有很多參數變化。 現我根據官網總結mapping最新的參數,希望能對大家有用處。 新增字段: eager_gl
Elasticsearch 5.4 Mapping詳解
targe AI ref last OS clas class 5.4 blog 這裏面講解的mapping說的很清楚了。 http://blog.csdn.net/napoay/article/details/73100110 修改mapping就比較坑了:
【ElasticSearch篇】--ElasticSearch從初識到安裝和應用
sequence ria wan shard 主機 single when please lock 一、前述 ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基於RESTful web接口,在企業中全文搜索時,特別常
Linux系列 初識ngnix——ngnix安裝及配置表內容詳解、讓nginx支持並顯示國家及其城市
ngnix安裝 nginx配置表內容Nginx(engine x)是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。功能:1.高性能的HTTP Server,解決c10k的問題2.高性能的反向代理服務器,給網站加速3.做為LB集群的前端一個負載均衡器nginx的優勢 IO
ElasticSearch 系列隨筆
www 錯誤 問題 day last del home AI 插入 1.ElasticSearch 常用設置 2.ElasticSearch 從2.2升級到6.2.4後在Kibana註意問題 (Validation Failed: 1: an id must be pro
elasticsearch系列一:elasticsearch(ES簡介、安裝&配置、集成Ikanalyzer)
ins 表示 吞吐量 search 工作 use art tcp傳輸 .net 一、ES簡介 1. ES是什麽? Elasticsearch 是一個開源的搜索引擎,建立在全文搜索引擎庫 Apache Lucene 基礎之上 用 Java 編寫的,它的內部使用 Lucene
elasticsearch系列三:索引詳解(分詞器、文檔管理、路由詳解)
ces com dex 合並 pda ams 最新 case dbi 一、分詞器 1. 認識分詞器 1.1 Analyzer 分析器 在ES中一個Analyzer 由下面三種組件組合而成: character filter :字符過濾器,對文本進行字符過濾處理,
elasticsearch系列八:ES 集群管理(集群規劃、集群搭建、集群管理)
記得 文件 如果 cse init host 網絡隔離 也有 沒有 一、集群規劃 搭建一個集群我們需要考慮如下幾個問題: 1. 我們需要多大規模的集群? 2. 集群中的節點角色如何分配? 3. 如何避免腦裂問題? 4. 索引應該設置多少個分片? 5. 分片應該設置幾個副本?
mybatis 解讀系列-初識
工作 style 檢索 java對象 有一個 cto build resources 模型 mybaits簡單介紹 MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。 MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以
Amazon DynamoDB系列---初識Amazon DynamoDB
什麼是 DynamoDB Amazon DynamoDB 是一種完全託管的 NoSQL 資料庫服務,提供快速而可預測的效能,能夠實現無縫擴充套件。使用 DynamoDB,您可以免除操作和擴充套件分散式資料庫的管理工作負擔,因而無需擔心硬體預置、設定和配置、複製、軟體修補或叢集擴充套
Elasticsearch 系列文章彙總(持續更新...)
Query DSL Query DSL 概要,MatchAllQuery,全文查詢簡述 Match Query Match Phrase Query 和 Match Phrase Prefix Query Java Rest Client API Elasticsearch Ja