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


背景:

  由於本人使用的是6.0以上的版本es,在使用發現很多中文博客對於mapping參數的說明已過時。ES6.0以后有很多參數變化。

  現我根據官網總結mapping最新的參數,希望能對大家有用處。

 

  es6.0與之前版本區別:

    -新增字段: eager_global_ordinals

    -刪除的字段: include_in_all

  ※特別提示:

    1,建議大家創建索引的時候指定mapping(用到特定分詞器,規划字段是否被索引來節省空間等)

    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": {
                    }
    
                }
    
            }
            }

 


免責聲明!

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



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