Elasticsearch とは… そして Kibana で検索を実践!


Elasticsearch とは

ぶっちゃけ NoSQL なデータベース エンジンです。

「オープンソースの全文検索エンジン」
「スケーラビリティに優れた全文検索エンジン」
「マルチテナント対応検索エンジン」

という説明文を良く見てきました。
それで、データはどこにあるの…? 何をどこから検索できるの…?
Elasticsearch が データベース エンジン です。

SQL Server のようなデータベース エンジンと比べて、
「データベース」や「テーブル」に相当する機能の呼び方が異なっています。

RDB Elasticsearch
データベース インデックス
テーブル マッピングタイプ
カラム(列) フィールド
レコード(行) ドキュメント

引用元: 3分で分かった気になる、Elasticsearchとは?

Kibana とは

Elasticsearch につながって データの見える化を実現する web ベースのアプリです。

使用例

どのような使い道があるのか… 身近な課題を例に考えたいと思います。

ファイル名検索で

ファイル名で検索… 私はよくこのコマンドを使います。もっぱら Windows ユーザーでして^^;

dir csvr.cs /b/s/a

D:\Proj\xxxxxxxxxx\Csvr.cs
D:\Proj\yyyyyyyyyy\Csvr.cs
D:\Proj\zzzzzzzzzzzz\Csvr.cs
D:\Proj\wwwwwwwwwwww\Csvr.cs

非常に強力なのですが… サブディレクトリをくまなく探索するために、多大な待ち時間が発生します。

そこで予めデーターベース化しておけば高速に検索できるはず。

Elasticsearch にデータを追加し、その強力といわれる検索エンジンをフル活用すれば待ち時間を短縮できるのでは、という目論見です。

(しかしながら、ファイルの増減によりデータベースの方の情報が古くなります。定期的にデータを最新の情報に更新する必要があります)

Index API の解説通り、延々とファイル情報の JSON を投入していきます。

PUT dd36/files/D%3A%5CProj%5Cxxxxxxxxxx%5CCsvr.cs
{
    path: "D:\Proj\xxxxxxxxxx\Csvr.cs",
    ext: "cs",
    name: "Csvr.cs",
    size: 4178
}

ファイルパスの urlencode をキーにしています。
dd36 は私の PC 名です。

Elasticsearch にデータを投入したら Kibana にアクセスします。

例: http://ubunku:5601/

まず Kibana にインデックス dd36 を認識して頂くように設定します。

これで良いと思います。つぎに検索

name:Csvr.cs で検索すると、nameCsvr.cs であるレコードを検索してくれます。

ワイルドカードが使えます。name:*csv*.cs のような検索ができます。
Csvr.cs のほかに Csvw.cs のレコードもヒットします。

まとめ

  • Elasticsearch は、方々紹介されているように優れた検索エンジンです。
  • Elasticsearch へデータを登録してから、それらを検索します。
  • Kibana を使うと UI で検索できます。
  • ワイルドカード検索を使うと便利!