LoginSignup
4
1

More than 5 years have passed since last update.

searchkick language: 'japanese' と Elasticsearch 6.5 系を組み合わせるとインデックスの作成に失敗する

Last updated at Posted at 2018-12-18

概要

Elasticsearch 6.5 はインデックス作成時に stemmer をチェックするようになり(elastic/elasticsearch #34601)、それに伴い searchkick.gem を日本語設定で使おうとするとエラーになる可能性がある。

Elasticsearch の挙動確認

以下のようなリクエストを 6.4, 6.5 それぞれの Elasticsearch に送ってみる。もちろん hogehoge などという stemmer は存在しない。

発行するリクエスト
curl -XPUT -H "Accept: application/json" -H "Content-type: application/json" localhost:9200/testdayon -d '
  {
    "settings": {
      "analysis": {
        "analyzer": "kuromoji",
        "filter": {
          "hoge": {
            "type": "stemmer",
            "language": "hogehoge"
          }
        }
      }
    }
  }'

6.4は成功する

レスポンスボディ
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "testdayon"
}

6.5は失敗する

レスポンスボディ
{
  "error" : {
    "root_cause" : [
      {
        "type" : "illegal_argument_exception",
        "reason" : "Invalid stemmer class specified: Hogehoge"
      }
    ],
    "type" : "illegal_argument_exception",
    "reason" : "Invalid stemmer class specified: Hogehoge",
    "caused_by" : {
      "type" : "class_not_found_exception",
      "reason" : "org.tartarus.snowball.ext.HogehogeStemmer"
    }
  },
  "status" : 400
}

searchkick.gem は Elasticsearch 6.5だとうまく動かない可能性がある

searchkick language: 'japanese' してインデックスを作成しようとすると、以下のようなリクエストを Elasticsearch に発行する。 JapaneseStemmer は存在しないので (stemmer のリスト)、6.5系だとこのリクエストは失敗する。

PUTリクエストのボディ(一部)
{
  "settings": {
    "analysis": {
      "analyzer": "kuromoji",
      "filter": {
        ...(省略)
        // この部分が不正になる
        "searchkick_stemmer": {
          "type": "stemmer",
          "language": "japanese"
        }
        ...(省略)

対策

プルリクを送ったら直してくれました。

searchkick の最新ブランチ、もしくは次にリリースされるであろう v3.1.3 を使えば大丈夫そうです。

4
1
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
4
1