Elastic

※前提条件:本情報はAndroid Studio 1.5.1を基づいて説明してる

概要

Elasticsearchは全文検索エンジンサービスであり、特徴:

  • 「Document-Oriented」(ドキュメント指向)
  • 検索対象データのビジネス要件を JSON 構造へ落とし込む(基本これだけ)

RDBとのマッピング

ClusterDatabaseクラスター。1つ以上の Node (Elasticsearch Server) で構成される
NodeDBインスタンス、RDMのDBサーバに相当
IndexRDBの Database に相当、1つの Cluster に複数の Index を作成できる
Mapping TypeRDBの Table に相当します。1つの Index に複数の Type を作成することができます。
DocumentRDBの Row に相当、Document は複数の Field を持っていて、フラットな情報だけでなく、ネストされた情報も表現できる。JSON フォーマットで表現出来る情報をストアできる
Shard1つの Index を作成すると、そのパフォーマンスを分散できるように複数の Shard が作成されます。それはちょうど OS 上のディレクトリと RAID で構成されたハードディスクの関係に近いイメージです。

※Index は論理的な概念、Shard は物理的な概念

Elasticsearchの検索データに関連度にはスコアというものが設定されています。1ワードの検索ではこのスコアの算出にはTF/IDF(Term Frequency/Inverse Document Frequency)という考え方が採用されています。

基本機能

  • Mapping  フィールドの型や分析方法の設定
  • Analysis  言語処理や正規化などフィールドの値の加工について
  • Query DSL  JSON フォーマットによる検索条件の組み立て

フィールド名

{"user_id": 1, "create_date": "2016-03-15"}
  • キャメルケース or スネークケースに統一する  例:user_name
  • データの内容が想像できるフィールド名称にする  悪い例:user 良い例:user_name
  • フィールド命名規約を作成することで将来的な設計コストも削減できる
  • データ型が Nested できる
PUT my_index/my_type/1
{
  "group": "fans",
  "users": [
    {
      "first_name": "John",
      "last_name": "Smith"
    },
    {
      "first_name": "Alice",
      "last_name": "White"
    }
  ]
}

※参照:
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html

Nested Type vs Parent-Child

Nested オブジェクトと類似したものに Parent-Child Relationship がある

Nested オブジェクトと比較したメリット・デメリットを以下にまとめました。

Parent-Child のメリット:

  • 子のドキュメントを再インデックスなしに親のデータを更新できる
  • 子のドキュメントは親や多の子ドキュメントに影響を与えることなく、追加、更新、削除することができる。
  • 子のドキュメントは検索要求の結果として返すことができる。

Parent-Child のデメリット:

  • クエリーのパフォーマンスが落ちる
  • メモリを多く消費する

サーチ API(RESTful API)

Elasticsearch のサーチ API の基本ルールは以下の URL パターンです。

GET|POST /{index}/{type}/_search

サーチ API のバリエーション

  • /_search すべてのインデックス内のすべてのタイプを対象に検索する
  • /blog/_search blog インデックス内のすべてのタイプを対象に検索する
  • /blog,author/_search blog と author インデックス内のすべてのタイプを対象に検索する
  • /b*,a*/_search b から始まるインデックスと、a から始まるインデックス内のすべてのタイプを対象に検索する
  • /blog/posts/_search blog インデックス内の posts タイプを対象に検索する
  • /blog,author/posts,users/_search blog と author インデックス内の posts と users タイプを対象に検索する
  • /_all/posts,users/_search すべてのインデックス内の posts と users タイプを対象に検索する

本番環境の検索はエイリアス名を使おう https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html

ページング

SQL では LIMIT を使って、1ページあたりの結果を取得します。Elasticsearch では、size と from パラメータを使います。

  • size: 1度に検索結果を取得する数を指定します。デフォルトは10です。
  • from: スキップする検索結果数を指定します。デフォルトは0です。
GET /_search?size=5
GET /_search?size=5&from=5
GET /_search?size=5&from=10


中古車買取実績No.1ガリバー

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:33:36 (690d)