elasticsearch _mapping api


https://www.elastic.co/guide/cn/elasticsearch/guide/current/mapping-intro.html
通過 /_mapping ,我們可以查看 Elasticsearch 在一個或多個索引中的一個或多個類型的映射 。

GET /gb/tweet/_mapping
{
   "gb": {
      "mappings": {
         "tweet": {
            "properties": {
               "date": {
                  "type": "date",
                  "format": "strict_date_optional_time||epoch_millis"
               },
               "name": {
                  "type": "string"
               },
               "tweet": {
                  "type": "string"
               },
               "user_id": {
                  "type": "long"
               }
            }
         }
      }
   }
}

自定義域映射
盡管在很多情況下基本域數據類型 已經夠用,但你經常需要為單獨域自定義映射 ,特別是字符串域。自定義映射允許你執行下面的操作:
全文字符串域和精確值字符串域的區別
使用特定語言分析器
優化域以適應部分匹配
指定自定義數據格式

域最重要的屬性是 type 。對於不是 string 的域,你一般只需要設置 type :
索引不存在的情況下,創建索引和類型mapping

PUT /gb
{
  "mappings": {
    "tweet" : {
      "properties" : {
        "tweet" : {
          "type" :    "string",
          "analyzer": "english"
        },
        "date" : {
          "type" :   "date"
        },
        "name" : {
          "type" :   "string"
        },
        "user_id" : {
          "type" :   "long"
        }
      }
    }
  }
}

給某個類型創建mapping,可以用來插入列

PUT /gb/tweet/_mapping
{
    "properties": {
        "number_of_clicks": {
            "type": "integer"
        }
    }
} 


默認, string 類型域會被認為包含全文。就是說,它們的值在索引前,會通過 一個分析器,針對於這個域的查詢在搜索前也會經過一個分析器。
string 域映射的兩個最重要 屬性是 index 和 analyzer 。
index 屬性控制怎樣索引字符串。它可以是下面三個值:
analyzed
首先分析字符串,然后索引它。換句話說,以全文索引這個域。
not_analyzed
索引這個域,所以它能夠被搜索,但索引的是精確值。不會對它進行分析。
no
不索引這個域。這個域不會被搜索到。
string 域 index 屬性默認是 analyzed 。如果我們想映射這個字段為一個精確值,我們需要設置它為 not_analyzed :

{
    "tag": {
        "type":     "string",
        "index":    "not_analyzed"
    }
}


其他簡單類型(例如 long , double , date 等)也接受 index 參數,但有意義的值只有 no 和 not_analyzed , 因為它們永遠不會被分析。

對於 analyzed 字符串域,用 analyzer 屬性指定在搜索和索引時使用的分析器。默認, Elasticsearch 使用 standard 分析器, 但你可以指定一個內置的分析器替代它,例如 whitespace 、 simple 和 english:

{
    "tweet": {
        "type":     "string",
        "analyzer": "english"
    }
}

 

更新映射
你可以 增加_ 一個存在的映射,你不能 _修改 存在的域映射。如果一個域的映射已經存在,那么該域的數據可能已經被索引。如果你意圖修改這個域的映射,索引的數據可能會出錯,不能被正常的搜索。
我們可以更新一個映射來添加一個新域,但不能將一個存在的域從 analyzed 改為 not_analyzed 。

我們決定在 tweet 映射增加一個新的名為 tag 的 not_analyzed 的文本域,使用 _mapping :

PUT /gb/tweet/_mapping
{
  "properties" : {
    "tag" : {
      "type" :    "string",
      "index":    "not_analyzed"
    }
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM