『Elastic Stack 実践ガイド』(惣道 哲也著、インプレス、2020年8月11日発行)

Elastic Search は全文検索ソフトとして2010年に登場した。索引検索を行う。

用語

転置インデックスは、単語と単語が出現する文書の組み合わせで作成されるインデックスのこと。

検索ライブラリー:インデクサとサーチャの機能を提供する。Apache LuceneJAVA

検索サーバレイヤ:Apache Solr、Elasticsearch。REST APIインターフェイスを持つ。いずれも検索ライブラリLuceneを呼び出す。

検索システムレイヤ:クローラーやWebユーザーインターフェイスを持つ。エンタープライズサーチ製品。オープンソースではnamazu、Fessがある。

ElasticsearchはオランダのElastic社が開発している。Compassが前身。コア機能はオープンソース。高機能オプションはElastic License。

REST API

リクエスト:API エンドポイント(http://<サーバ名>:<ポート番号>/<パス文字列>/、パス文字列で操作対象リソースや呼び出す機能)。HTTPメソッド(GET, POST, PUT, DELETE. HEAD)。リクエストメッセージ(JSONオブジェクト)

レスポンス:HTTPステータスコード、レスポンスメッセージ

JSON形式のドキュメント志向DB

ドキュメントはJSON形式、Key:Valueがフィールド。転置インデックスはフィールド毎に作成、管理する。

フィールドのタイプ。text、keyword、数値、日付,真偽、オブジェクト、配列、その他。textは単語に分割されて単語毎に転置インデックスを作成する。keywordは分割せずそのまま保存(例:New YorkをNewとYorkにしない)。

大量のドキュメントを複数のシャードに分散配置することで検索性能をスケールする。

同じデータソースから(日付指定などで)任意の数のインデックスを作る。インデックステンプレート機能。

クエリ

”_search”APIエンドポイントを使う。複数のインデックスをまたがる検索ができる。クエリーをJSONオブジェクトとして発行する。

全文検索クエリ:text型フィールドを、転置インデックスを用いて検索する。検索キーワードを複数指定するとOR検索(デフォルト)になる。AND条件、最低N個(minimum_should_match)、match_phraseクエリで語順の指定、query_string(leceneシンタックスを直接指定)

Termレベルクエリ:keyword型フィールドを完全一致で検索する。

Boolクエリ:must, should, must_not, filter

クエリ結果のソート:ソート対象フィールドと順序、その組み合わせ、スコアによるソート、配列型データの算術計算に基づくソート

アナライザ

全文検索を行うために文書を単語に分割する処理機能がAnalyser

日本語の形態素解析プラグイン:kuromoji Analysis Plugin

単語に区切るだけでは単語の表記の揺れがある:単数/複数、大文字/小文字、時制と活用形。これを解消する方法にステミングは語幹、正規化、ストップワード(The, ofなど)の除去、English Analyser。

フィールド毎にAnalyserを指定できる。アナライズ機能のカスタム定義ができる。あらかじめよく使う機能を組み合わせたビルトインAnalyserが用意されている。

ステップ(構成要素):Char filter(オプションで任意数指定)⇒Tokenizer(必須。一つ指定する)⇒Token Filter(オプションで任意数指定)

Char filterにはHTML Strip Char(タグの除去)、Mapping Char(特定文字のマッピング)、Pattern Replace (正規表現)

Tokenizerは多数ある。単語分割、N-gram、構造化テキスト分割(メールアドレス、URL、ハイフン区切りなど)

Token FilterはLower case, Stop token, Stemmer, Synonym

日本語用プラグインICU Analysis Plugin (日本語、中国語、韓国語、タイ語などアジア系言語用)

kuromoji Analysis Plugin:Char filter(踊り字の正規化)、Tokenizer(モードとしてのnormal, search, extended。句読点除去)、Token filter(活用基本形、品詞の指定による除去、読み仮名、長音削除、ストップ語除去、漢数字を英数字表現に)

Aggregation:データ分析、分類、集計を行う。Metrics(統計値)、Buckets(分類)などがある。

スクリプティング:ユーザー独自のロジックを構成する。Painless言語。

Elastic Stack

関連するソフトウェア群。Kinabaはデータをブラウザで可視化する。Logstashはログを収集・加工・転送するためのデータ処理パイプラインを実現する。Beatsはログやメトリックスデータを収集、転送する。