既存のデータをコピーしたり新しいインデックスにデータをコピーしたい
次にデータ移行の際に移行するデータは新インデックスのルール(マッピング)に従ってデータを格納し、検索できるのか検証する。 要するに既存のデータを新インデックスに移し替えると新インデックスの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": "おはよう" } } } // この検索結果はヒットする。 // つまり既存のデータを新インデクスに移行した場合、新インデックスのルールに従ってデータが格納されることが確認された。