1. 程式人生 > >elasticsearch之mapping配置

elasticsearch之mapping配置


本文主要記錄es的schema mapping的一些配置項

mapping定義

{
  "mappings": {
    "post": {
      "properties": {                
        "id": {"type":"long", "store":"yes", "precision_step":"8" },
        "name": {"type":"string", "store":"yes", "index":"analyzed" },
        "published": {"type":"date", "store":"yes", "precision_step":"8" },
        "contents": {"type":"string", "store":"no", "index":"analyzed" }             
      }
    }
  }
}

或者

{
  "book" : {
    "_index" : { 
      "enabled" : true 
    },
    "_id" : {
      "index": "not_analyzed", 
      "store" : "yes"
    },
    "properties" : {
      "author" : {
        "type" : "string"
      },
      "characters" : {
        "type" : "string"
      },
      "copies" : {
        "type" : "long",
        "ignore_malformed" : false
      },
      "otitle" : {
        "type" : "string"
      },
      "tags" : {
        "type" : "string"
      },
      "title" : {
        "type" : "string",
        "fields":{
          "sort":{"type":"string","index":"not_analyzed"}
        }
      },
      "year" : {
        "type" : "long",
        "ignore_malformed" : false,
        "index" : "analyzed"
      },
      "available" : {
        "type" : "boolean"
      }
    }
  }
}

屬性解說

  • index
    可選值為analyzed(預設)和no,如果是欄位是字串型別的,則可以是not_analyzed.

  • store
    可選值為yes或no,指定該欄位的原始值是否被寫入索引中,預設為no,即結果中不能返回該欄位。

  • boost
    預設為1,定義了文件中該欄位的重要性,越高越重要

  • null_value
    如果一個欄位為null值(空陣列或者陣列都是null值)的話不會被索引及搜尋到,null_value引數可以顯示替代null values為指定值,這樣使得欄位可以被搜尋到。

  • include_in_all
    指定該欄位是否應該包括在_all欄位裡頭,預設情況下都會包含。

mapping操作

新建mapping

curl -s -XPOST '192.168.99.100:9200/library' --data-binary @mapping.json

更新mapping

curl -XPOST '192.168.99.100:9200/library/book/_mapping' -d'
{
    "book": {
        "properties": {
            "description": {
                "type": "string", 
                "store": "yes", 
                "index": "analyzed"
            }
        }
    }
}
'

檢視mapping

curl -XGET '192.168.99.100:9200/library/book/_mapping?pretty'

返回

{
  "library" : {
    "mappings" : {
      "book" : {
        "properties" : {
          "author" : {
            "type" : "string"
          },
          "available" : {
            "type" : "boolean"
          },
          "characters" : {
            "type" : "string"
          },
          "copies" : {
            "type" : "long"
          },
          "description" : {
            "type" : "string",
            "store" : true
          },
          "otitle" : {
            "type" : "string"
          },
          "section" : {
            "type" : "long"
          },
          "tags" : {
            "type" : "string"
          },
          "title" : {
            "type" : "string"
          },
          "year" : {
            "type" : "long"
          }
        }
      }
    }
  }
}

可以修改的項:

  • 增加新的型別定義

  • 增加新的欄位

  • 增加新的分析器

不允許修改的項:

  • 更改欄位型別(比如文字改為數字)

  • 更改儲存為不儲存,反之亦然

  • 更改索引屬性的值

  • 更改已索引文件的分析器

注意的是新增欄位或更改分析器之後,需要再次對所有文件進行索引重建

欄位的資料型別

簡單型別

  • string(指定分詞器)

  • date(預設使用UTC保持,也可以使用format指定格式)

  • 數值型別(byte,short,integer,long,float,double)

  • boolean

  • binary(儲存在索引中的二進位制資料的base64表示,比如影象,只儲存不索引)

  • ip(以數字形式簡化IPV4地址的使用,可以被索引、排序並使用IP值做範圍查詢).

有層級結構的型別

比如object 或者 nested.

特殊型別

比如geo_point, geo_shape, or completion.

參考