ElasticSearch検索の使用


ElasticSearchは、Javaユーザーに2つの内蔵クライアントを提供します.
1.ノードクライアント:無データノードとしてクラスタに加入する.(無データノードの意味はいかなるデータも保存しないことである)しかし、彼はデータがクラスタ内の具体的な位置を知っていて、直接に対応ノードに転送することができる.
2.トランスポートクライアント:クラスタに参加せず、単純にクラスタ内のノードにリクエストを転送します.
両方のクライアントは9300ポートを介してクラスタとインタラクティブです.クラスタ内のノード間でも9300ポートで通信します.
1つのノードは単一のサーバであり、クラスタの一部であり、データを格納し、クラスタのインデックスと検索機能に参加する.特定のクラスタ名を構成することによって、特定のクラスタを追加します.
1つのクラスタは、1つ以上のノード(サーバ)から構成されます.1つのクラスタに1つのノードだけが有効であり、非常に良い.
Elasticsearchへの要求の構成部分は、他の一般的なHTTP要求と同じです.
curl -X '://:/?' -d ''
  • VERB HTTP方法:GET,POST,PUT,HEAD,DELETE
  • PROTOCOL httpまたはhttpsプロトコル(Elasticsearchの前にhttpsエージェントがある場合のみ使用可能)
  • HOST Elasticsearchクラスタのいずれかのノードのホスト名は、ローカルのノードであればlocalhost
  • と呼ばれます.
  • PORT Elasticsearch HTTPサービスがあるポートで、デフォルトは9200
  • です.
  • PATH APIパス(例えば_countはクラスタ内のドキュメントの数を返す)は、PATHが_cluster/statsまたは_nodes/stats/jvm
  • のような複数のコンポーネントを含むことができる.
  • QUERY_STRINGいくつかのオプションのクエリー要求パラメータ、例えば?prettyパラメータは、要求をより美しく読みやすいJSONデータ
  • に戻す.
  • BODY 1つのJSON形式の要求主体(要求が必要であれば)
  • 1.索引
    Elasticsearchは、オブジェクト全体またはドキュメント(document)を格納できるドキュメント向けです.しかし、ストレージだけでなく、各ドキュメントのコンテンツをインデックス(index)して検索できるようにします.
    elasticSearchにデータを格納する動作をインデックス(index)(データベース)といい、各ドキュメントはタイプ(type)(表)に帰属する.各タイプは複数のドキュメント(レコード、行)を含み、各ドキュメントは複数のフィールド(フィールド)を含む.
    Relational DB -> Databases -> Tables -> Rows -> Columns
    Elasticsearch -> Indices(     ) -> Types(     ) -> Documents(      ) -> Fields(  )

    elasticSearchでの「インデックス」の意味:
  • 従来のリレーショナル・データベースと同様のデータベース名
  • は、データベース内のinsertキーワードに似ています.
  • インデックスは、データベース内の特定のカラムのインデックスに似ています.

  • eg:従業員ディレクトリの作成:従業員ごとのドキュメントにインデックスuserを作成し、各ドキュメントのタイプはemployeeであり、インデックスはElasticSearchクラスタに格納される.
    path:PUT/megacorp/employee/1
    {
    "first_name" : " ",
    "last_name" : " ",
    "age" : 25,
    "about" : "     、  ",
    "interests": [ "  ", "  " ]
    }

    pathには、次の3つの情報が含まれています.
    名前
    説明
    megacorp
    索引名
    employee
    タイプ名
    1
    この社員のID
    ディレクトリに従業員情報を追加します.
    2.ドキュメントの取得
  • インデックス・プロシージャには、elasticSearchが単一の従業員の情報を取得する体験を行うためのいくつかのデータが格納されています.HTTP GETリクエストを実行し、ドキュメントの「アドレス」であるインデックス、タイプ、IDを指定します.

  • GET/megacorp/employee/1
  • 最後にキーワードを使用searchは、元のドキュメントIDに取って代わります.応答コンテンツのhits配列には、私たちのすべての3つのドキュメントが含まれています.デフォルトでは、検索は上位10の結果
  • を返します.
    GET/megacorp/employee/_search
  • クエリー文字列クエリー(urlパラメータ)
  • GET/megacorp/employee/_search?q=last_name:ル
  • DSL文クエリ(パラメータはjson形式で渡す)
  • を使用
    GET/megacorp/employee/_search
    {
        "query" : {
            "match" : {
            "last_name" : " "
             }
         }
    }

    複雑な検索の追加検索フィルタ
    eg:22歳以上の従業員を得る(gtより大きく、ltより小さい)
    GET/megacorp/employee/_search
    {
        "query" : {
            "filtered" : {
                "filter" : {
                    "range" : {
                        "age" : { "gt" : 22 }
                }
          },
        "query" : {
            "match" : {
                "last_name" : " "
                    }
                }
            }
        }
    }

    全文検索.ドキュメントとクエリー条件の一致度に従ってソートし、結果セットを返します.従来のデータベースでは、一致が一致しないのみで、一致クエリーはありません.
    GET/megacorp/employee/_search
    {
        "query" : {
            "match" : {
                "about" : " "
            }
        }
    }

    フレーズ検索.matchクエリをmatch_に変更する限りphraseクエリーでいいです.クエリーには、「水泳」と「水泳」(隣接)の従業員レコードが同時に含まれます.
    GET/megacorp/employee/_search
    {
           "query" : {
                "match_phrase" : {
                    "about" : "  "
            }
         }
    }

    集約.データベースに似たgroupby(textタイプを先に開く).
    textタイプを開く
    POST/megacorp/employee/
    {
      "properties": {
        "interest": {
          "type":"text",
          "fielddata":true
        }
      }
    }

    すべての社員の中で最大の共通点(趣味)を見つけることは何ですか.
    GET/megacorp/employee/_search
    {
    
        "aggs": {
    
            "all_interests": {
    
                "terms": { "field": "interests" }
    
            }
    
        }
    
    }