Esノート---新規esインデックス

5617 ワード

Esのインデックスに対する操作はrestful apiで行われています.パラメータはjsonの山で、1年前に調べながら書いたことがあります.今回は移行しました.esは6.0バージョンになりました.ずいぶん変わりました.メモを書いて記録してください.
esインデックスを作成するのは簡単で、putリクエストです.
PUT /my_index
{
    "settings": { ... any settings ... },
    "mappings": {
        "type_one": { ... any mappings ... },
    },
  "aliases" : {...}
}

settings mappingsとaliasesを含むインデックスを新規作成します.settingsはスライスなどのパラメータを設定し、mappingsはインデックスの各typeをどのように処理するかを設定し、aliasesは以前使ったことがなく、あまり使えないように見えますが、こちらは記録しません.
settings
こちらには設定できるパラメータがたくさんありますが、公式には修正はお勧めしません.よくあるのは直す必要があるのは2人だけだ.
  • number_of_shardsインデックスごとのプライマリスライス数は、デフォルト値は5です.この構成はインデックス作成後に変更できません.
  • number_of_replicasの各プライマリスライスのコピー数は、デフォルト値は1です.この構成は、アクティブなインデックス・ライブラリの場合、いつでも変更できます.
  • PUT /my_temp_index
    {
        "settings": {
            "number_of_shards" :   3,
            "number_of_replicas" : 2
        }
    }
    

    インデックスにsettings値を設定する
    PUT /my_temp_index/_settings
    {
        "number_of_replicas": 1
    }
    

    settings値の変更
    mappings
    各ドキュメントにはtypeがあり、各typeには独自のmappingがあります.mappingはtypeのfield、各fieldのデータ型、およびesがこれらのfieldをどのように処理するかを定義します.
    1つのmappingsでは複数のtypeが推奨されず、es 6以降のバージョンでは複数のtypeが許可されない可能性が高いことに注意してください.
    公式の計画では、es 7-es 9は徐々にtypeを削除します.
    各indexには1つのtypeしかないことをお勧めします.1つのindexの各typeのフィールドは完全に独立していないため、1つのindexの複数のtypeはいくつかの浪費をもたらします.
    経由可能/mappingは、es内の1つ以上のインデックスの1つ以上のmappingを表示します.
    データ型(field)
  • 文字列string
  • text
  • keyword

  • 数字
  • long integer short byte double float half_float scaled_float

  • ブール型boolean
  • 日付date
  • range
  • integer_range
  • float_range
  • long_range
  • double_range
  • date_range

  • array
  • object

  • 私が使わないタイプはたくさんあります.
    新しいfieldを含むドキュメントをインデックスすると、esはダイナミックマッピングを使用し、JSONの基本データ型からfieldタイプを推測しようとします.
    一般的には、デフォルトのマッピングで十分です.Esは123のようにinteger、123.123のようにdoubleに自動的にマッピングしますが、多くの場合、カスタムマッピング、特にstringタイプが必要です.
    カスタムマッピングでは、次のことができます.
  • 全文文字列と正確な文字列(nameフィールドなど)
  • 特定言語アナライザ
  • を使用
  • ...

  • 1つのfieldの最も主要な属性はtypeであり、ほとんどのfieldではtypeを設定するだけでよいのが一般的です.
    {
        "number_of_clicks": {
            "type": "integer"
        }
    }
    

    range
    PUT range_index
    {
      "mappings": {
        "my_type": {
          "properties": {
            "expected_attendees": {
              "type": "integer_range"
            },
            "time_frame": {
              "type": "date_range", 
              "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
            }
          }
        }
      }
    }
    

    書式設定
    PUT range_index/my_type/1
    {
      "expected_attendees" : { 
        "gte" : 10,
        "lte" : 20
      },
      "time_frame" : { 
        "gte" : "2015-10-31 12:00:00", 
        "lte" : "2015-11-01"
      }
    }
    

    検索形式
    POST range_index/_search
    {
      "query" : {
        "range" : {
          "time_frame" : { 
            "gte" : "2015-10-31",
            "lte" : "2015-11-01",
            "relation" : "within" 
          }
        }
      }
    }
    

    この部分は比較的簡単で細かく展開されていない.
    string
    stringタイプについては、以前はstringのみでしたが、現在はkeywordとtextの2種類に分かれています.
    text
    textはまずアナライザを経てインデックスされ、descのようなフィールドはtextを使用する必要があります.次の重要なフィールドがあります.
    analyzer
    アナライザは、このstringをどのように処理するかを指定することができます.例えば、htmlのタグをすべて削除してから、単語を分けて、無駄な停止を削除して、残りのtokenをインデックスしたいと思っています.デフォルトのstandardアナライザを使用するか、別の内蔵アナライザを指定できます.プラグインにインストールされているikなどの3番目のアナライザを使用するか、アナライザをカスタマイズすることもできます.
    アナライザは使いやすい
    {
        "desc": {
            "type":     "string",
            "analyzer": "ik_smart"
        }
    }
    

    そのうちik_smartはすでにインストールされているサードパーティのアナライザです.
    index
    検索可能に設定するかどうか、boolean
    norm
    採点時にいくつかの標準化処理を行うかどうか、追加のリソースが必要だと理解しています.
    fields
    このフィールドは面白いです.まず例を見てみましょう
    "filename":{  
      "type":"text",
      "norms":false,
      "fields":{  
         "raw":{  
            "type":"keyword",
            "ignore_above":256
         }
      }
    },
    

    filenameのフィールドで、こちらはtypeがtextで、分詞検索ができます.しかし、正確なマッチングが必要な場合があります.filenameを使用することができます.raw.挿入時にfilenameを入力するだけで、esに保存されているのは2部、filenameとfilenameです.raw.
    keyword
    textとは異なり、keywordはアナライザを通過せず、検索時に正確に一致します.
    index fields
    この2つのパラメータはtextと同じです
    ignore_above
    一定の長さを超える文字列を削除
    マッピング操作
    新規マッピング
    PUT /index_name
    {
      "mappings": {
        "person" : {
          "properties" : {
            "desc" : {
              "type" :    "string",
              "analyzer": "ik_smart"
            },
            "birth" : {
              "type" :   "date"
            },
            "name" : {
              "type" :   "string",
              "index" : "not_analyzed"
            },
            "user_id" : {
              "type" :   "long"
            }
          }
        }
      }
    }
    

    新しいindex、descフィールドはik分詞インデックス、birthはログ、nameフィールドの正確なインデックス、user_idはlong型に設定されています.
    マッピングの更新
    PUT /index_name/_mapping/person
    {
      "properties" : {
        "tag" : {
          "type" :    "string",
          "index":    "not_analyzed"
        }
      }
    }
    

    tagフィールドを追加します.