diadia

興味があることをやってみる。自分のメモを残しておきます。

既存のデータをコピーしたり新しいインデックスにデータをコピーしたい

次にデータ移行の際に移行するデータは新インデックスのルール(マッピング)に従ってデータを格納し、検索できるのか検証する。 要するに既存のデータを新インデックスに移し替えると新インデックスのtokenizerやchar_filterに従って検索できるのかを確認する。

// おはようが検索できないインデックスを作成する
PUT my_sample
{
  "settings":{
    "analysis": {
      "analyzer": {
        "my_kuromoji_analyzer": {
          "type": "custom",
          "tokenizer": "kuromoji_tokenizer"
        }
      }
    }
  },
  "mappings":{
    "properties": {
      "content":{
          "type":"text",
          "analyzer": "my_kuromoji_analyzer"
        }
    }
  }
}
// データ格納
PUT my_sample/_doc/1
{
  "content":"<p>おは<span>よう</span></p>"
}

// これでは”おはよう”は検索できないことを確認できた

次に新たなインデックスを作成する。そのインデックスにデータを流しこむ。

PUT my_new_sample
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "kuromoji_normalize": {                 
            "char_filter": [
              "html_strip",
              "icu_normalizer"                    
            ],
            "tokenizer": "kuromoji_tokenizer",
            "filter": [
              "kuromoji_baseform",
              "kuromoji_part_of_speech",
              "cjk_width",
              "ja_stop",
              "kuromoji_stemmer",
              "lowercase"
            ]
          }
        }
      }
    }
  },
  "mappings":{
    "properties":{
      "content":{
        "type": "text"
      }    
    }
  }
}
// my_sampleのデータをmy_new_sampleに移行する(コピー)
POST _reindex
{
  "source": {
    "index": "my_sample"
  },
  "dest": {
    "index": "my_new_sample"
  }
}

このmy_new_sampleインデックスではおはようは検索できるかを確認する

GET my_new_sample
{
  "query":{
    "match":{
      "content": "おはよう"  
    }
  }
}
// この検索結果はヒットする。
// つまり既存のデータを新インデクスに移行した場合、新インデックスのルールに従ってデータが格納されることが確認された。