ElasticSearchマッピングと設定


参考リンクと文献


7.1設定-設定
参考書📚 始めよう!だんせい研究
各インデックスには、設定とマッピングの2つの情報単位があります.
最初にインデックスを作成した後、GET<インデックス名>クエリで設定とマッピング情報を表示します.

マッピング(mapping)


マッピングは、データの格納形式と、検索エンジンがこれらのデータにどのようにアクセスし、処理するかの説明です.
Elastic Searchのマッピングは、通常、インデックス/タイプ単位で指定されるリレーショナル・データベース・システムのアーキテクチャに例えられます.
弾性調査でマッピングを設定する方法は大きく2つある.
1つ目は、インデックスを作成しながらマッピングを設定することであり、2つ目は、マッピングAPIによってマッピングを設定することである.
ドキュメントに入力するデータのマッピング形式を定義する場合は、propertiesフィールドにフィールド名やタイプなどのオプションを入力します.
メソッドはPUTメソッドを使用します.
{	
	"mappings" : {
    	"<타입명>" : {
        	"properties" : {
            	매핑내용
                }
           }
     }
}
Elastic Searchが作成していないインデックスに初めてデータを入力すると、インデックスが自動的に作成され、マッピング設定が行われます.
インデックス/タイプマッピングを決定するには、인덱스/타입/_mappingを指定します.

既存のマッピングにフィールドを追加


既存のマッピングにフィールドを追加するには、PUTメソッドとしてmapping APIを使用する必要があります.
PUT 호스트/인덱스/_mapping/타입
{
	"<타입명>" : {
    	"properties" : {
        	매핑내용
          }
      }
}
設定したマッピングに追加できますが、変更や削除は行われません.

組み込みフィールド


Elastic Searchのマッピングには、ドキュメントのデータアーキテクチャを定義する機能があります.
内部で提供される機能を使用して、メタデータ情報とデータ処理方法を設定することもできます.
  • id:DocumentのIDにインデックスを設定するかstroeオプションでIDを設定できるストレージ
  • {
    	"mappings" : {
        	"타입명" : {
            	"내장 필드명" : {
                	필드 내용

    データ型


    インデックスを作成する場合、データのマッピング情報は、propertiesオプションにデータのフィールド名と属性情報を入力することによって設定されます.
    インデックスに作成されたすべてのタイプのフィールドに同じマッピング設定を適用する場合は、タイプ名ではなく_defaultを入力し、設定値を指定してマッピングするだけです.
    データ型にはstring、integer/long、float/double、boolean、オブジェクトなどの拡張タイプがあります.

    文字列


    文字列は、フレックス・リサーチで最もよく使用されるデータ型です.特にElastic Searchでは,アナライザの設定に応じて文字列がインデックスや検索に与える影響が最も大きい.
    文字列で使用するオプションは次のとおりです.
  • store:デフォルト値はfalseであり、このフィールドの値は保存されません.通常、データをインデックスする場合、データソースはsourceに格納されます.このオプションがfalseであっても検索できます.
  • index:アナライザを適用するかどうかを示す
  • analyzed , not_analyzed , no
  • boost:フィールドを重み付けすることで検索結果の優先度に影響します.既定値は1.0です.値が高いほど、フィールドの検索結果のスコアが高くなります.
  • analyzer:データインデックスおよび文字列検索用のアナライザを指定します.適用するには、indexオプションでanalyzedを設定する必要があります.
  • index_analyzer:データインデックス用のアナライザを指定します.
  • search_analyzer:文字列を検索するアナライザを指定します.
  • include_in_all:allマッピングフィールドが有効になったときにインデックスを指定
  • オブジェクト


    Elastic Searchのフィールドには、オブジェクトタイプの値を格納できます.
    Elastic Searchには、オブジェクトのメソッドは含まれません.名前:値タイプの値データが含まれます.
    形態は以下の通り.
    "mappings" : {
    	"<타입명>": {
        	"properties" : {
            	"<상위 데이터 필드명>" : {
                	"type" : "object",
                    	"properties" : {
                        	"<하위 데이터 필드명>" : {
                            데이터 필드 내용 
                            }
    たとえば、次のように設定できます.
    "mappings" : {
    	"test_user": {
        	"properties" : {
            	"user" : {
                	"type" : "object",
                    	"properties" : {
                        	"name" : { "type" : "string"},
                            "age" : {"type" : "integer"},
                            "married" : {"type" : "boolean"}
                            }

    マルチフィールド


    Elastic Searchは、データ入力時に1つのフィールド値を異なる設定の複数のフィールドに自動的に繰り返し格納するマルチフィールド機能を提供します.
    たとえば、booksインデックスのtitleフィールドに「The Prince and the Paper」をインデックスする値を考慮します.
    titleフィールドのindexオプションを解析した場合、この値は形態素解析を経て単語ごとにインデックス化され、オプションが解析でなければ解析できないため、その内容を全体的に検索して結果を得る必要があります.
    場合によってはprinceを使用して検索し、場合によってはデータ・バーを正確に検索する必要がある場合は、マルチフィールド・オプションを使用して値を一致させることができます.
    "mappings" : {
    	"book" : {
        	"properties" : {
            	"title" : {
                	"type" : "string",
                    "index" : "analyzed",
                    "fields" : {
                    	"raw(다중필드 특징을 나타내는 이름 설정하기" : {"type" : "string" , "index" : "not_analyzed"}
    このようにマッピングしてデータを入力する場合は、「title」に値を入力するだけです.また、default値は、常にマルチフィールド部分fieldsの内容以外の設定がdefault値である.
    では、rawオプション(結果を生成するにはすべて検索しなければならない)を使用する場合は、どうすればいいのでしょうか.
    http://localhost:9200/books/_search
    
    "query" : {
    	"term" : {
        	"title.raw" : "The Prince and the Pauper"}
         }
    }
    上記のコードのようにqueryでクエリーする場合は、このフィールドに複数のフィールドオプションを個別に指定できます.

    設定


    number_of_shards, number_of_replicas


    primary shard数とreplicaは、以下のnumber of shards、number of replicas変数に設定されます.
    ほとんどの設定は、次のインデックスを設定する設定で指定されます.
    ただし、indexレベルは省略してもよいし、入力は正常に入力してもよい.

    refresh_interval


    一般的な設定にはrefresh intervalがあります.
    「≪フレックス検索|Flex Search|emdw≫」で、セグメント作成のリフレッシュ時間の値をデフォルトで1秒に設定します.
    同様にsettingsのindexの下に設定します.

    analyzer, tokenizer, filter

    PUT my_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "type": "custom",
              "char_flter": [ "...", "..." ... ]
              "tokenizer": "...",
              "filter": [ "...", "..." ... ]
            }
          },
          "char_filter":{
            "my_char_filter":{
              "type": "…"
              ... 
            }
          }
          "tokenizer": {
            "my_tokenizer":{
              "type": "…"
              ...
            }
          },
          "filter": {
            "my_token_filter": {
              "type": "…"
              ...
            }
          }
        }
      }
    }
    settingsの下の分析で、各アナライザ、char filter、tokenizer、filterを入力します.analysisコンテンツは一度作成しても変更できません.
    作成したインデックスに辞書(セキュリティラインや炭素タグなど)を追加または変更する場合は、closeインデックスを先に作成してからopenインデックスを開くことができます.