elasticserchのAnalyzerについてまとめてみる

2月 12, 2022

どもども。ヘアワックスが無限に欲しいsaisaiです。


今回もelasticserchに関する記事を書いていきます!


本日はelasticserchを使用する上で必ず抑えておきたい"Analyzer"についてまとめてみようと思います。

Analyzerとは

Analyzerとは、テキストを検索最適化するために分析する一連の処理を行ってくれる機能です。


Analyzerは大きく分けて3つの要素で構成されています。


・Character filters
・Tokenizer
・Token filters


それぞれの働きについて見ていきましょう。

Character filters

Character filtersはテキストの分析前処理を行ってくれるもので、テキスト分析処理において最初に通過するプロセスです。


例えばHTMLタグの除去や表記揺れの修正、ルールテキスト変換などを行ってくれます。


次にTokenizerによる単語分けのプロセスがありますが、その処理を精度高く行うための下ごしらえを行ってくれるものと認識しておくと良さそうです。


ちなみに、使用するかどうかは任意です。必須項目ではありません。

Tokenizer

Tokenizerはテキストを空白などで識別しトークン(単語)ごとに分割する処理を行います。


ただし、日本語の場合は英語のように単語ごとに空白があるわけではありません。そのためN-Gram分析を使用することでN文字単位で分割したりプラグイン(例:kuromoji_tokenizer)を使用することで日本語に適した分割を行うこともあります。


こちらはAnalyzerを使用する上で必須の要素となっています。

Token filters

Token filtersはトークン単位で変換処理を行ってくれます。


例えばトークンを全て小文字にしたり、ステミング(表記揺れの修正)、シノニム変換(類義語変換)を行ったりします。


最後に行われる処理で、こちらも使用するかは任意の要素です。

Analyzerの定義

Analyzerの基本要素は一通り抑えることができました。


では、実際にAnalyzerを使用する際はどのようなJSONで定義するのでしょうか。


以下に例を挙げておきます。

 "mappings": {
    "properties": {
      "blog_message": {
        "type": "text",
        "analyzer": "standard"
      }

今回はmapping句でAnalyzerを定義してみます。

内容はpropertiesで定義します。例えば上記の場合はblog_messageフィールドの型としてtext型を指定し、Analyzerとしてstandard Analyzerを指定しています。

これでblog_messageフィールドに格納されるテキストに関してはインデックス格納時、クエリ実行時共にstandard Analyzerで処理されることとなります。

最後に

今回はelasticserch使用時に必ず抑えておきたいAnalyzerについてまとめてみました。


クエリの実行結果が期待通りではなかった場合は、ぜひAnalyzerの見直しを行っていきましょう。


最後まで読んでいただきありがとうございました!


↓オススメ教材

ElasticSerch

Posted by CY