LoginSignup
1
4

More than 3 years have passed since last update.

Kibanaはじめる

Last updated at Posted at 2019-05-25

kibanaについて

概要

Kibanaとは、

KibanaはElastic社が開発しているビジュアライゼーションのためのツール[1]

動作環境

  • elasticsearch: 6.7.1
  • kibana: 6.7.1

始め方

elasticsearchと同様に導入の仕方は2種類。

1. ホストPCにダウンロードする。

2. dockerを用いる。(推奨)

詳細はelasticsearchに関してを参照

使い方

使い方は主に参考サイト[1]を参照。

ただ、データの検索や分析について複雑なのでまとめる。

検索queryについて

データをelasticsearchに入れた後の話。

検索や分析のチュートリアルと見てもらっていい。

用いたデータは、livedoor グルメの研究用データセット

参考にしたサイトは、[2]Elasticsearch 6 を使ったデータ検証

まず文字列を扱う場合、タイプをわけることができる

elasticsearchにてmapping_templateを作成するが、その際データをどのように認識すべきかを設定する。特に文字列については注意が必要。

  1. text: 文章を分割して検索する(アナライザーが関与できる。)
  2. keyword: 文字列は分割されない(アナライザーが関与できない。)

*アナライザーが関与するとは?

例えば、「ラーメン カレー」で検索する。
1. 文字列がtext型の場合

「ラーメンの「風香」」-> 「ラーメン」「の」「風香」
となるため検索結果にヒットする。
2. 文字列がkeyword型の場合

「ラーメンの「風香」 -> 「ラーメンの「風香」」
となるため検索結果にヒットされない。

加えて、語順も重要視する。

「ラーメンとカレーの「松屋」」はヒットするが、「カレーとラーメンの...」はヒットしない。

text型の検索(文字列の部分一致)について

1.「地名 料理ジャンル/店名」と言った形でレストランを探す

クエリ例

{
   "query" : {
     "simple_query_string" : {
       "query": "目黒 とんき",
       "fields": ["name", "name_kana", "address"],
       "default_operator": "and"
     }
   }
}
  • simple_query_string: 便利クエリのひとつ。
    • query: 検索したい文字列
    • fields: 検索する場所(対象)
    • default_operator: 演算子(AND, ORなど)

(注意点)ver6からはfieldsに__all_を利用できない。

2.PV順・口コミが多い順・評価が高い順など検索結果をソート

クエリ例

{
   "query" : {
     "simple_query_string" : {
       "query": "東京 ラーメン",
       "fields": ["name", "name_kana", "address"],
       "default_operator": "and"
     }
   },
   "sort" : [{ "access_count" : {"order" : "desc", "missing" : "_last"}}]
}
  • simple_query_string: 1.と同様。
  • sort: 検索結果をsortするための条件
    • access_count: sortしたい項目(access_count はmapping_templateで設定した項目)
    • order: asc: 昇順, desc: 降順
    • missing: データにsortしたい項目がなかった場合、どのように配置するかということ。 __ last: 最後に配置, _ first: 最初に配置
      *defaultは
      last

*sortのdocumentは、こちら

3. ドキュメントのスコアを自分で定義する

条件のなかで優先するものを決めてその項目が一番当てはまるものを探すことができる。

具体的には各条件にweightを設定する。

クエリ例

{
   "query" : {
     "function_score" : {
       "query" : {
         "simple_query_string" : {
           "query": "ハンバーガー",
           "fields": ["name", "name_kana", "address"],
           "default_operator": "and"
         }
       },
       "score_mode": "sum",
       "boost_mode": "replace",
       "functions" : [
         {
           "filter" : { "range" : { "access_count" : { "from" : 500 }}},
           "weight" : 10
         },
         {
           "filter" : { "range" : { "photo_count" : { "from" : 3 }}},
           "weight" : 10
         },
         {
           "filter" : { "geo_distance" : { "distance" : "2km", "location" : [139.43 , 35.38] }},
           "weight" : 100
         }
       ]
     }
   }
}

*詳細な検索をしたい場合は、function_score を使う。

*documentはこちら

*クエリの様々な使い方は、こちら
- function_score
- query: simple_query_stringと同様。
- score_mode: スコアの計算方法。(以下の表に記載)
- boost_mode: クエリのスコアの計算方法(以下の表に記載)
- functions: 設定するqueryと重さ

*score_modeとboost_modeの違い

  • score_mode: functionsで設定した重さを指定したクエリに対して演算(デフォルトは積)した値
  • boost_mode: 元々のqueryの値にある値を演算(デフォルトは積)した結果とscore_modeの値を組み合わせた値
functionsのスコア = score_mode(f1*w1, f2*w2, ...)
- fx: 各functionの値
- wx: 各functionの重さ
- fxとwxの演算は任意(デフォルトは積)
function_scoreのスコア = boost_mode(queryスコア * boost, functionsスコア)
- queryスコアとboostの演算は任意(デフォルトは積)

*score_modeのパラメータ

param
multiply 各条件の積
sum 各条件の総和
avg 各条件の平均(重さ平均)
first 最初に適合した条件を使う
max 最大値をとる条件を使う
min 最小値をとる条件を使う

*boost_modeのパラメータ

param
multiply query_scoreとfunctions_scoreの積
replace function_scoreのみ使う
sum query_scoreとfunctions_scoreの和
avg query_scoreとfunctions_scoreの平均
max query_scoreとfunctions_scoreの大きい方
min query_scoreとfunctions_scoreの小さい方

keyword型の検索(文字列の全一致)について

いろいろある。詳しくは、こちら

aggregationを用いた分析

データの分析を行うのに用いる。ログを解析する時とか使えそう。

analyzerについて

今回は日本語の分析だったのでkuromojiを用いたがデータの解析をする場合は違うものを使ったほうがいいかも。

参考サイト

[1]Kibanaで簡単! サクサク ビジュアライズしよう!

[2]Elasticsearch 6 を使ったデータ検証
 

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4