5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ElasticSearchで検索のプロになる!05.Templateの話

Last updated at Posted at 2016-02-18

ElasticSearchでは、特にスキーマの設定をしなくとも自動マッピングしてくれますが、使っているとそれでは厳しくなってくる。そこで、マッピングを手動で設定してやりましょうというお話。

やり方は色々あるのですが、普通は設計(Entity-Relation-Diagramなど)して、それを反映すると思うし、そうでないと後で管理が面倒。
ということで、ここではテンプレートファイルを作ってそれを反映してマッピングをするという方法で書きます。

ElasticSearchではあらかじめ特定のインデックスに対して一括で同じ設定を当てはめるという方法があります。

私の場合は特定のIndexに対して一括で同じマッピングの設定を適用させるというもの。
利用目的が日本語での検索なので
・n-Gram
・形態素
この2つの設定はあらかじめ設定しておきたい。その場合のテンプレートの例が以下になります。
こまごました設定がありますが、大まかに説明すると

キー名 説明
template これから書く設定を適用する範囲。sample*とあるのでインデックス名がsampleで始まるものに適用される。
setting デフォルト設定以外の設定等が必要な場合に追記する。ここでは日本語会席のための設定としてkuromojiとby-gramの設定を記載している。
mapping マッピングの設定。検索に使うanalyzerなどを指定していて、defultにはない日本語解析系のAnalyzerをsettingに書いたのでそれを利用した。
{
  "template": "sample*",
    "settings": {
      "analysis" : {
        "analyzer" : {
          "ja-ma-analyzer" : {
            "type" : "custom",
            "tokenizer" : "ja-ma-tokenizer"
		  },
          "ja-2gram-analyzer" : {
            "type" : "custom",
            "tokenizer" : "ja-2gram-tokenizer"
          }
        },
        "tokenizer": {
          "ja-ma-tokenizer": {
            "type": "kuromoji_tokenizer",
            "mode": "normal"
          },
          "ja-2gram-tokenizer": {
            "type" : "nGram",
            "min_gram" : "2",
            "max_gram" : "2"
          }
        }
      }
    },
    "mappings": {
      "_default_" : {
        "dynamic_templates" : [
          {
            "sample_text_for_ma" : {
              "match" : "text-ja-ma",
              "mapping" : {
                "type" : "string",
                "store" : "no",
                "analyzer" : "ja-ma-analyzer"
              }
            }
          },
          {
            "sample_text_for_2gram" : {
              "match" : "text-ja-2gram",
              "mapping" : {
                "type" : "string",
                "store" : "no",
                "analyzer" : "ja-2gram-analyzer"
              }
            }
          }
		]
	  }
    }
  }
}

使ったjsonファイルは

curl -XPUT http://localhost:9200/_template/main_template?pretty -d @search_template.json

そしたらkuromojiなんてねーよってエラーが出た。
なので、手動でkuromojiのプラグインをインストール。
こちらを参考に、Elasticsearchのバージョンにあったものを選びます。
https://github.com/elasticsearch/elasticsearch-analysis-kuromoji
うちの場合は

bin/plugin install elasticsearch/elasticsearch-analysis-kuromoji/2.7.0
[root@VTSRHTS1501:/usr/share/elasticsearch]$ bin/plugin install elasticsearch/elasticsearch-analysis-kuromoji/2.7.0
-> Installing elasticsearch/elasticsearch-analysis-kuromoji/2.7.0...
Trying http://download.elasticsearch.org/elasticsearch/elasticsearch-analysis-kuromoji/elasticsearch-analysis-kuromoji-2.7.0.zip...
Trying http://search.maven.org/remotecontent?filepath=elasticsearch/elasticsearch-analysis-kuromoji/2.7.0/elasticsearch-analysis-kuromoji-2.7.0.zip...
Trying https://oss.sonatype.org/service/local/repositories/releases/content/elasticsearch/elasticsearch-analysis-kuromoji/2.7.0/elasticsearch-analysis-kuromoji-2.7.0.zip...
Trying https://github.com/elasticsearch/elasticsearch-analysis-kuromoji/archive/2.7.0.zip...
Trying https://github.com/elasticsearch/elasticsearch-analysis-kuromoji/archive/master.zip...
Failed to install elasticsearch/elasticsearch-analysis-kuromoji/2.7.0, reason: failed to download out of all possible locations..., use --verbose to get detailed information

prvateIPなので、そのままでは当然取得できず。
Proxy使う場合は

bin/plugin install elasticsearch/elasticsearch-analysis-kuromoji/2.7.0 -DproxyHost=119.235.233.241 -DproxyPort=9002

でオプションに付けてあげればいい。

完了後、リスタート

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?