2015年6月4日木曜日

elasticsearch Mapping

  • 公開日:2015年06月04日
  • 最終更新日:2015年06月06日

elasticsearchのmappingの学習メモ

環境

  • vagrant centOS6.5
  • elasticsearch 1.5.2

Mappingとは


リレーショナルDBでいうところのテーブル定義に相当します。
ただし、データを格納する為のフィールドを用意して、型を設定するだけのリレーショナルDBとは異なります。
elasticsearchではフィールドの型の他に、言語解析処理などのドキュメントを検索可能にする為の各種設定をすることができます。

Mappingの例


mappingの例を以下に記載します。


  "mappings": {
    "mountain": {
      "_source": {
        "enabled": true
      },
      "_all": {
        "enabled": true,
        "analyzer": "my_analyzer"
      },
      "properties": {
        "id": {
          "type": "integer",
          "index": "not_analyzed"
        },
        "name": {
          "type": "string",
          "index": "analyzed",
          "analyzer": "my_analyzer"
        },
        "name_kana": {
          "type": "string",
          "index": "analyzed",
          "analyzer": "my_analyzer"
        },
        "summary": {
          "type": "string",
          "index": "analyzed",
          "analyzer": "my_analyzer"
        }
      }
    }
  }

データの説明

  • id - integer型, 分割しない。つまり10を1とか0でヒットさせない。
  • 他 - String型。日本語が入り、『富士山』などの単位でヒットさせる。

サンプルなのでシンプルに作成してあります。フィールドに言語解析処理が色々と設定しているのが特徴です。
上記で設定しているanalyzerの『my_analyzer』はこの記事で作成したデータを利用しています。

Mappingの登録


上記のmappingを参考にし、index『kuromoji_sample』、type『mountain』のMappingデータを登録してみましょう。


curl -XPUT 'http://localhost:9200/kuromoji_sample/' -d'
{
    "settings": {
        "index":{
            "analysis":{
                "tokenizer" : {
                    "kuromoji_user_dict" : {
                       "type" : "kuromoji_tokenizer",
                       "mode" : "extended",
                       "discard_punctuation" : "false",
                       "user_dictionary" : "userdict_ja.txt"
                    }
                },
                "analyzer" : {
                    "my_analyzer" : {
                        "type" : "custom",
                        "tokenizer" : "kuromoji_user_dict"
                    }
                }

            }
        }
    },  
    "mappings": {
      "mountain": {
        "_source": {
          "enabled": true
        },
        "_all": {
          "enabled": true,
          "analyzer": "my_analyzer"
        },
        "properties": {
          "id": {
            "type": "integer",
            "index": "not_analyzed"
          },
          "name": {
            "type": "string",
            "index": "analyzed",
            "analyzer": "my_analyzer"
          },
          "name_kana": {
            "type": "string",
            "index": "analyzed",
            "analyzer": "my_analyzer"
          },
          "summary": {
            "type": "string",
            "index": "analyzed",
            "analyzer": "my_analyzer"
          }
        }
      }
    }
}
'

{"acknowledged":true}

{"acknowledged":true}が出力されれば登録は成功です。

Mappingの確認


mappingを確認にするために、
『http://localhost:9200/kuromoji_sample/_mapping/mountain?pretty=true』
にアクセスします。
urlの『_mapping/mountain』がポイントです。
pretty=trueはjsonを整形して表示したい場合に利用する引数です。


{
  "kuromoji_sample" : {
    "mappings" : {
      "mountain" : {
        "_all" : {
          "enabled" : true,
          "analyzer" : "my_analyzer"
        },
        "properties" : {
          "id" : {
            "type" : "integer"
          },
          "name" : {
            "type" : "string",
            "analyzer" : "my_analyzer"
          },
          "name_kana" : {
            "type" : "string",
            "analyzer" : "my_analyzer"
          },
          "summary" : {
            "type" : "string",
            "analyzer" : "my_analyzer"
          }
        }
      }
    }
  }
}

きちんと登録されています。


サンプルデータの登録


curl -XPOST 'http://localhost:9200/kuromoji_sample/mountain/_bulk' -d \
'
 { "index": { "_index": "kuromoji_sample", "_type": "mountain", "_id": "1" }  }
 { "id": "1", "name": "富士山",   "name_kana": "フジサン", "summary": "日本一の山だよ" }
 { "index": { "_index": "kuromoji_sample", "_type": "mountain", "_id": "2" } }
 { "id": "2", "name": "高尾山",    "name_kana": "タカオサン", "summary": "世界一登山客が多い山だよ。" }
'

大量のデータを投入する場合は、jsonファイルを使うと便利です。

登録したサンプルデータを検索


inquisitorを利用します。
urlに『http://localhost:9200/_plugin/inquisitor/#/』を入力してelasticsearch-inquisitorを立ち上げます。


{
  "query": {
    "query_string": {
      "query": "富士"
    }
  }
}

上記の例はクエリー検索です。
このように、ここで色々な検索パターンを試せます。
検索方法についてはまた別記事でまとめて説明します。

以上。

参考サイト


elasticsearch オススメ書籍


elasticsearchをがっつりと使うなら側においておきたい一冊です。
というより、日本語の本はこれしかありません。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...