前提条件
背景
Laravel × Elasticsearchの事例がそこまで多くなかったので
自分が調べたことが今からやろうと思ってる人の助けに少しでもあればと思いまして。
環境
PHP 7.4
Laravel 6.2
Elasticsearch 7.8
この記事を読んだ方がいい人
・MySQLの経験がある程度あってSQLってこんな感じだよねー、な感覚がある人。
・RDBでは遅くなってしまう検索を解決してくれるイケイケな道具があることを知りつつ、それがなんなのかよくわからない人。
この記事を読まない方がいい人
・Elasticsearchの実務経験がすでにあって全文検索エンジンとマブダチな人。
・日本人ならGroongaにしろよ、って人。
Elasticsearchとは
全文検索エンジンの一種。
そもそもそれってなに?
ざっっっっくり言うと、MySQLのLIKE検索をちょーはやくするためのやつ。
なんではやいの?
文字列の検索には2種類あるらしい。
逐次検索 と 索引検索
前者はGrepコマンドでお馴染み、ぜーんぶのデータを確認して合致するものを探す力技作業。
後者は、「Qiita」の文字列を含むデータはこことここにあるよ!的な状態をあらかじめ作っておくことで素早くけんさくできるようになってるもの。
他にはどんな種類のものがあるの
どこ | 概要 | 備考 | |
---|---|---|---|
Elasticsearch | オランダのElastic社。Kibanaだしてるところ。 | 名前がかっこいい。 | AWSはこのソフトウェアをラップしてサービス化してるだけっぽい。Elasticって単語はAmazonが大好きだからAmazonが名付けたのかと思ってた |
Algolia | フランスのAlgolia社 | Laravelが標準サポートしてる。 | |
MySQL | Oracle | みんな大好き | MySQLにも全文検索の機能提供してた気がする詳しくは知らん |
Groonga | 未来検索ブラジル | 2ちゃんのひろゆきが役員やってる?やってた?会社 |
難しい言葉が出てきてつらい
日本語をインデクシング (インデックスすること)するにあたって避けて通れない言葉がこの2つ。
日本語は英語と違って単語と単語の間にスペースがないから、単語の区切り目が判断できない。
その問題を解決するための手法がこの2つということ。
N-gram
形態素解析
逆に言えばわけのわからん言葉はこれくらい。
N-gram
Nというのはエンジニアお馴染みの数字を表したパラメータ。
n=1 ~ n=3には特別な名前がついている
・uni-gram
・bi-gram
・tri-gram
要は文字をn文字ずつに分けて解釈するわ、っていう手法。
完全におならだと勘違いしていたよ
のような文章なら
完全|全に|にお|おな|なら|らだ|だと|と勘|勘違|違い|いし|して|てい|いた|たよ|
みたいな感じでインデクシングする。
「おなら」という言葉を検知するのに「おな」とか「なら」とかは意味がないので、ちょっと効率悪いのが特徴。
形態素解析
日本語を読み取って意味のあるかたまりに分けながらインデクシングする。
そのための日本語形態素解析エンジンといわれるもの。
はっ?そんなんあるなら最初から言えや!
って感じですが、内部に辞書を保持する必要があり言葉のブレを微調整する必要ある場合も。
まとめ
今回はElasticsearchの概要の概要のみを書きました。
次回は基本的な用語をまとめたいと思います。