天天看點

Elasticsearch 之Mapping設定

術語介紹

文檔 Document:使用者存儲在es 中的資料文檔,es中存儲的最小單元,類似于MySQL表中的一行資料

索引 Index:由具有相同字段的文檔清單組成,表示一個文檔的集合,類似于table,在6.0後一個Index下隻有一個type。(在6後的版本會把type去除)

節點 Node:一個Elasticsearch的運作執行個體,是叢集的構成單元

叢集 Cluster:由一個或多個節點組成,對外提供服務

每一個文檔都有唯一的id辨別

自行指定

es自動生成

資料類型

核心資料類型

字元串型 text、keyword

數值型 long、integer、short、byte、double、float、half_float、scaled_float

日期類型 date

布爾類型 boolean

二進制類型 binary

範圍類型 integer_range、float_range、long_range、double_range、date_range

如果清楚知道字段要設定的類型,最好作為選擇,比如,float 比double可以節省近50%的存儲空間

複雜資料類型

數組類型 array

對象類型 object

嵌套類型 nested object (與object不同是此類型會被特殊處理,文檔不會和父文檔混在一起)

地理位置資料類型

geo_point

geo_shape

專用類型

記錄ip位址:ip

實作自動補全:completion

記錄分詞數:token_count

記錄字元串hash值:murmur3

percolator

父子查詢:join

多字段特性multi-fields

允許對同一個字段采用不同的配置,比如分詞,常見例子如 對人名實作拼音搜尋,隻需要在人名中新增一個子字段為pinyin即可(要安裝文字轉拼音插件)

es 批量導入資料後,結果

$result = $this->elasticsearch->bulkDoc($params);
        //var_dump($result);
        // $result結果:   
            array(3) {
          ["took"]=>int(5)
            ["errors"]=>bool(false)
            ["items"]=>array(12) {
            [0]=>array(1) {
              ["index"]=> array(8) {
                ["_index"]=>string(8) "rss_data"
                ["_type"]=>string(8) "rss_data"
                ["_id"]=>string(19) "1126102154422484923"
                ["_version"]=> int(2)
                ["result"]=> string(7) "updated"
              ["_shards"]=> array(3) {
                ["total"]=> int(1)
                ["successful"]=> int(1)
                ["failed"]=>  int(0)
                  }
                  ["created"]=> bool(false)
              ["status"]=> int(200)
                }
              }
          }
        };      

繼續閱讀