こちらの記事をやってみています。
mappingから全然うまくいかなくてかなりしんどいです。
ちなみに私のデータベース知識は「mysql、あぁ聞いたことある。全然わからんけど」レベルです。
jsonも同じようなレベルです。
ぶっちゃけアプリ層全然わかんないっす。
途中までやった結果、もうどの情報が最新かわからん。という状態になってしまっていったん断念。
一応、やったことを以下に記載します。
役に立たなくはない。
Incorrect HTTP method for uri
これは allowed: [GET, DELETE, PUT, HEAD]って言ってくるので、まぁそれに従うのがベターでしょう。
っつても、最終的にいろいろ話変わってくるんですが。
Content-Type header [application/x-www-form-urlencoded] is not supported
Content-Typeの指定必須らしいです。
action_request_validation_exception
これ、マジで根が深いです。
ここからcurl使うのやめて、kibanaのDev Tools使うことにしました。
analyzerとmappingの作り方のバージョン違い
analyzerの作り方
これを参考に。
ただ、kuromojiそのまま使えばいいんじゃないかな?と若干思ってます。
最後までやってないので、うまくいくかわかんないですが。
mappingの作り方
まず、この辺をやっておいたほうがいいです。
これを見ると、明らかにmappingの作り方が違うなー、と思うはずです。
その後、Elasticsearchチュートリアル - 不可視点のElasticsearchのデータ構造あたりの図と見比べるとなんとなくわかるはず。
要は、 PUT index/type/_mapping としたうえで、typeから指定する必要がある。
と思ったんですが、そもそもこれも公式と違うし古いんじゃないか説。 こっからもうめちゃくちゃです。
"type": "string"は使えない
"type": "text"になります
"type": "geo_point"に対して"store": "yes"は使えない?
よくわかりませんでしたが、エラーメッセージ的に以下にしました。 "store": "true"
以上を踏まえて
analyzer指定してないので、よくないかも。
PUT ldgourmet/restaurant/_mapping { "restaurant": { "properties": { "restaurant_id": { "type": "integer" }, "name": { "type": "text" }, "name_alphabet": { "type": "text" }, "name_kana": { "type": "text" }, "address": { "type": "text" }, "description": { "type": "text" }, "purpose": { "type": "text" }, "category": { "type": "text" }, "photo_count": { "type": "integer" }, "menu_count": { "type": "integer" }, "access_count": { "type": "integer" }, "closed": { "type": "boolean" }, "location": { "type": "geo_point", "store": "true" } } } }
と、ここまではうまくいったんですが、次にrating mapを追加しようとしたら、以下のメッセージが。
"Rejecting mapping update to [ldgourmet] as the final mapping would have more than 1 type: [restaurant, rating]"
Elasticsearch 6 を利用する前に把握しておいた方がよさそうなこと | Developers.IOにあるようにインデックス内の複数タイプ利用不可みたいです。
というか、上記のリンク先の内容、string->text問題とかだいたい詰まったこと書いてあるから、読んでおいたほうがいいですね。
まぁ、なんか解決策はあるんだろうけど、もうめんどくさすぎるのであきらめるか、最初からやり直したほうがいい気がしてきました。