Elasticsearch 実践
2018-11-07 (Wed) · 654 words

1.Elasticsearch 特徴

全文検索

Doc1: イベントが東京で開催される
Doc2: 東京マラソンに参加する
単語 DocId
東京 1, 2
イベント 1
マラソン 2

1.Elasticsearch 基礎

ドキュメント (Document)

ドキュメントの例

{
  "host" : "192.168....",
  "user" : "MyName",
  "date" : "2018-12-07T12:00:10"
}

フィールド

文字列

数値

日付

真偽値

オブジェクト

配列

マルチフィールド型

インデックス

ドキュメントタイプ

マッピング

物理概念

ノード

クラスタ

シャード

レプリカ

インデックスとドキュメントの基本操作

インデックス

ドキュメントタイプの管理

インデックステンプレート

クエリ

範囲

GET API_ENDPOINT/INDEX_NAME/INDEX_TYPE_NAME/_search

DSL

GET API_ENDPOINT/INDEX_NAME/INDEX_TYPE_NAME/_search
{
  "query": {QUERY},
  "from": 0,
  "size": 10,
  "sort": [検索結果のソート指定],
  "_source": [検索結果に含めたいフィールド名を絞る]
}

クエリDSLの種類

全文検索クエリ

Boolクエリ (複合クエリ)

{
  "query": {
    "bool": {
      "must": [<基本クエリ>, <基本クエリ>,,,],
      "should": [<基本クエリ>, <基本クエリ>,,,],
      "must_not": [<基本クエリ>, <基本クエリ>,,,],
      "filter": [<基本クエリ>, <基本クエリ>,,,]
      }
    }
  }
}

ソート

フィールド名指定のソート

{
  "query": {<クエリの検索条件>},
  "sort": [
    {"stock_price": {"order" : "desc"}}
  ]
}

フィールド名を複数指定したソード

{
  "query": {<クエリの検索条件>},
  "sort": [
    {"stock_price": {"order" : "desc"}},
    {"founded": {"order" : "asc"}}
  ]
}

スコアに基づいたソード

{
  "query": {<クエリの検索条件>},
  "sort": [
    {"stock_price": {"order" : "desc"}},
    "_score"
  ]
}

配列型データの計算結果に基づいたソート

4章 全文検索とAnalyzer

ステミング

正規化

ストップワード

Analyzerの定義

マッピング定義で定義

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

Analyzer内部構成

  1. Char filter
    • 入力テキストの前処理
    • 文字単位の変換処理
    • HTML Strip Character Filter -> タグ除去(
      とか)
    • Mapping Character Filter -> 入力文字に含まれる特定文字にマッピングルールを定義し、変換する(例 ”:)” -> “happy“)
    • Pattern Replace Character Filter -> 正規表現ルールで入力文字を変換する(例 “123-456-789” -> “123_456_789”)
  2. Tokenizer
    • Char filterの出力データを入力として、テキスト分割処理をし、トークン(単語)の列を生成する
    • 単語分割用Tokenizer :
    • N-gram分割用Tokenizer :
    • 構造化テキスト分割用Tokenizer :
  3. Token filter
    • Tokenizerが分割したトークン(単語)に対して、トークン単位での変換処理を行うためのフィルタ機能
    • Lower case Token filter
    • トークン文字を小文字に変換
    • Stop Token filter
    • ストップワードの除去を行うフィルタリング
    • Stremer Token filter
    • ステミング処理を行うフィルタ
    • Synonym Token filter
    • 類義語(シノニム)を正規化して1つの単語に変換するためのフィルタ

Analyzerのカスタム定義

Aggregation

Metrics

Buckets

Pipeline

Matrix

分類と集計の例

Aggregation Query

Book Index {
  "タイトル": text,
  "ジャンル": keyword,
  "発売日": date,
  "価格": logn
}
Bucktes(ビジネス) Metrics(平均価格)
“ビジネス” 3400
“文学” 1350
“コンピュータ” 3200

Aggregation文法

"aggregations": {
  "<AGGREGATION_NAME>": {
    "<AGGREGATION_TYPE>": {
      "<AGGREGATION_BODY>"
    }
  }
}

Metrics文法


Top     back     Posts     Tags     About Me