概要
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 を使えば大丈夫そうです。