ElasticSearch 6.2 Mapping參數說明及text類型字段聚合查詢配置

背景:es6

  因爲本人使用的是6.0以上的版本es,在使用發現不少中文博客對於mapping參數的說明已過期。ES6.0之後有不少參數變化。app

  現我根據官網總結mapping最新的參數,但願能對你們有用處。性能

 

  es6.0與以前版本區別:大數據

    -新增字段: eager_global_ordinalsspa

    -刪除的字段: include_in_allcode

  ※特別提示:orm

    1,建議你們建立索引的時候指定mapping(用到特定分詞器,規劃字段是否被索引來節省空間等)blog

    2,mapping建立並插入數據後就沒法進行更改了!因此要對需求考慮全面:例如對於text類型字段須要聚合查詢(相似group by)對數據進行統計分析,排序

             就須要設置fielddata爲true 和fields字段才能進行聚合操做(此處詳解請看下面的內容2)索引

    3,若是必須更改字段屬性只能進行reindex,進行從新創建索引再將doc導入

 

1,es 6.2 mapping詳細說明

{
   "type" : "text", #是數據類型通常文本使用text(可分詞進行模糊查詢);keyword沒法被分詞(不須要執行分詞器),用於精確查找

    "analyzer" : "ik_max_word", #指定分詞器,通常使用最大分詞:ik_max_word
    
    "normalizer" : "normalizer_name", #字段標準化規則;如把全部字符轉爲小寫;具體以下舉例

    "boost" : 1.5, #字段權重;用於查詢時評分,關鍵字段的權重就會高一些,默認都是1;另外查詢時可臨時指定權重

    "coerce" : true, #清理髒數據:1,字符串會被強制轉換爲整數 2,浮點數被強制轉換爲整數;默認爲true

    "copy_to" : "field_name", #自定_all字段;指定某幾個字段拼接成自定義;具體以下舉例

    "doc_values" : true, #加快排序、聚合操做,但須要額外存儲空間;默認true,對於肯定不須要排序和聚合的字段可false

    "dynamic" : true, #新字段動態添加 true:無限制 false:數據可寫入但該字段不保留 'strict':沒法寫入拋異常

    "enabled" : true, #是否會被索引,但都會存儲;能夠針對一整個_doc

    "fielddata" : false, #針對text字段加快排序和聚合(doc_values對text無效);此項官網建議不開啓,很是消耗內存

    "eager_global_ordinals": true, #是否開啓全局預加載,加快查詢;此參數只支持text和keyword,keyword默承認用,而text須要設置fielddata屬性
    
    "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" ,#格式化 此參數表明可接受的時間格式 3種都接受

    "ignore_above" : 100, #指定字段索引和存儲的長度最大值,超過最大值的會被忽略

    "ignore_malformed" : false ,#插入文檔時是否忽略類型 默認是false 類型不一致沒法插入

    "index_options" : "docs" ,
    # 4個可選參數
    # docs(索引文檔號),
    # freqs(文檔號 + 詞頻),
    # positions(文檔號 + 詞頻 + 位置,一般用來距離查詢),
    # offsets(文檔號 + 詞頻 + 位置 + 偏移量,一般被使用在高亮字段)
    # 分詞字段默認是position,其餘的默認是docs

    "index" : true, #該字段是否會被索引和可查詢 默認true

    "fields": {"raw": {"type": "keyword"}} ,#能夠對一個字段提供多種索引模式,使用text類型作全文檢索,也可以使用keyword類型作聚合和排序

    "norms" : true, #用於標準化文檔,以便查詢時計算文檔的相關性。建議不開啓

    "null_value" : "NULL", #可讓值爲null的字段顯式的可索引、可搜索

    "position_increment_gap" : 0 ,#詞組查詢時能夠跨詞查詢 既可變爲分詞查詢 默認100

    "properties" : {}, #嵌套屬性,例如該字段是音樂,音樂還有歌詞,類型,歌手等屬性

    "search_analyzer" : "ik_max_word" ,#查詢分詞器;通常狀況和analyzer對應
    
    "similarity" : "BM25",#用於指定文檔評分模型,參數有三個:
    # BM25 :ES和Lucene默認的評分模型
    # classic :TF/IDF評分
    # boolean:布爾模型評分

    "store" : true, #默認狀況false,其實並非真沒有存儲,_source字段裏會保存一份原始文檔。
    # 在某些狀況下,store參數有意義,好比一個文檔裏面有title、date和超大的content字段,若是隻想獲取title和date

    "term_vector" : "no" #默認不存儲向量信息,
    # 支持參數yes(term存儲),
    # with_positions(term + 位置),
    # with_offsets(term + 偏移量),
    # with_positions_offsets(term + 位置 + 偏移量)
    # 對快速高亮fast vector highlighter能提高性能,但開啓又會加大索引體積,不適合大數據量用
}

normalizer舉例:
{
  "settings": {
    "analysis": {
      "normalizer": {
        "my_normalizer": {
          "type": "custom",
          "char_filter": [],
          "filter": ["lowercase", "asciifolding"]
        }
      }
    }
  },
  "mappings": {
    "type": {
      "properties": {
        "foo": {
          "type": "keyword",
          "normalizer": "my_normalizer"
        }
      }
    }
  }
}

copy_to舉例:
{
  "mappings": {
    "my_type": {
      "properties": {
        "first_name": {
          "type": "text",
          "copy_to": "full_name"
        },
        "last_name": {
          "type": "text",
          "copy_to": "full_name"
        },
        "full_name": {
          "type": "text"
        }
      }
    }
  }
}

 2,text類型字段進行聚合查詢(count(*) group by)

需求:對機構字段既能夠進行模糊查詢,又能夠按照字段全名進行聚合統計

實現:

-設置字段參數

 "institution": {
              "type": "text",
              "analyzer": "ik_max_word",
              "search_analyzer": "ik_max_word",
              "fielddata" : true,
              "fields": {"raw": {"type": "keyword"}}#若是不設置keyword索引在聚合時將會使用已分解後的詞。例如:想用「國泰君安」聚合,結果使用「國泰」,「君安」聚合
}              

-查詢時aggs參數

    body = {
            "query": {
                "range": {
                        "time": {
                                "gte": '2018-02-01'
                                }
                        }
                    },
            "aggs": {
                "institution_count": {
                    "terms": {"field": "institution.raw"},#使用keyword分組
                    "aggs": {
                    }
    
                }
    
            }
            }
相關文章
相關標籤/搜索