--- title: それでもKibanaでgrep検索を実装したい件 (7.3.2まで) tags: Elasticsearch Kibana JavaScript author: Y-Shikase slide: false --- #はじめに Kibanaの検索ボックス(Filters)はKQLかLuceneが使えますが、非エンジニアが扱うにはやや敷居が高いです。 エンジニアであっても、常時利用していないと検索式のルールを覚えていませんので、入力に手間がかかります。 また、検索結果はElasticsearchのデフォルトanalyzerでの解析後にOR検索(一般的なスコア検索)となっていますが、「検索対象内のデータは把握していて、ヒットさせたいだけ」という場面においては、単純なANDでのgrep検索を望む人も一定数いるかと思います。 KQLやLuceneでgrepのような単語の完全一致によるAND検索をするには、正規表現を使えばいいのですが、正規表現は一般的ではなく、エンジニア向けの技術ですし、エンジニアでも面倒な入力です。 Kibanaをそのような「単なるエンジニア向けツール」で終わらせないため、もう少し非エンジニア側の気持ちに寄り添い、単純なUIを提供しなければなりません。と考えました。 要するに、KibanaのFiltersが感覚的に使えないし、入力した単語で何検索してるんだかわかんない(と思われている)のでロジックが明確な検索を提供したいのです。 #前提環境 * [RSS(ニュース記事)をNode-RED+Elasticsearch+Kibanaで可視化)](https://qiita.com/Y-Shikase/items/725217dfe4ff41eb7e95)を構築済み #HTML+CSSの作成 使用する技術はそれほど難しくありません。HTMLとCSSを作るのみです。 そもそも、KibanaはAngularを利用しており、URLの「_g(global)」に期間指定、「_a(application)」に検索式を埋め込めるようになっています。 他にも「embed=true」でメニューなどが非表示の埋め込みモードになります。 これだけ理解していれば、あとはiframeで画面を分けてJavascriptでURLを変化させれば良いだけです。 で、作成したコードはこちらです。(どーん!) ※可能な限り短くしているつもりです。 ```rss_style.css: html { height: 100%; overflow-y: hidden; } body { font-size: 20px; background-color: #fff; height: 100%; } form { height: 100%; } iframe { overflow: auto; width: 100%; height: 100%; border: none; } ``` ```rssnews.html: RSS News
RSS News 検索語
``` JavaScript内の変数「url」を自身が利用しているKibanaのダッシュボードのURLに変更してください。 URLの調べ方は、Kibanaのダッシュボードから「共有」-「埋め込みコード」で「保存されたオブジェクト」にチェック後、「iFrameコードをコピー」してください。 ![スクリーンショット 2019-10-22 0.27.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/77d15854-36db-1da1-b051-1878bbccab2c.png) 作成した rssnews.html を開くと、上部に検索ボックスのあるKibanaの画面が表示されます。 検索語の横のテキストボックスに単語を入力して「return」を押すか、「送信」ボタンを押すと、Kibanaの「Filters」に正規表現でAND検索するURLを生成して下部のKibanaのフレームに表示させます。 ![スクリーンショット 2019-10-22 1.24.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/d7e88c75-c3cf-5979-b279-f81622a7afdb.png) ばっちり、検索ができているようです。 そのままURLで渡すと問題の起きる文字はエスケープしているのですが、一部の文字はまだ問題が起きるようです。記号なので放置していますが、具体的には ※「'&#!+」 あたりです。 ちなみに、URLでのKibana画面操作は機能として保証されているものではないようで、バージョンアップで使えなくなる可能性もあるらしいです。 それでも、こういった使い方もできてしまうとは、Kibanaの可視化画面はよくできているなぁと感心します。