ElasticSearchでmsearchについて調べてみた

仕事でElasticSearchを使って複数のクエリをまとめたいことが発生したので、msearchについて調べてみました。

msearch(multi-search)は、Elasticsearchで複数のクエリを一度に送信して、一括で結果を取得することができる機能です。msearchを使用することで、単一のリクエストで複数の検索を実行することができるため、ネットワークラウンドトリップの数を減らすことができ、検索のパフォーマンスを向上させることができます。

以下は、msearchを使用して、複数の異なるクエリを一度に実行する方法の例です。

POST /_msearch
{}
{"query": {"match": {"title": "Elasticsearch"}}}
{}
{"query": {"match": {"title": "Kibana"}}}
{}
{"query": {"match": {"title": "Logstash"}}}

この例では、3つの異なるクエリを含むmsearchリクエストを送信しています。各クエリは、JSONオブジェクトとして定義されており、空のJSONオブジェクト({})が各クエリの間に挿入されています。

{
  "responses": [
    {
      "took": 3,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 10,
        "max_score": 1.0,
        "hits": [
          {
            "_index": "my-index",
            "_type": "_doc",
            "_id": "1",
            "_score": 1.0,
            "_source": {
              "title": "Elasticsearch",
              "body": "Elasticsearch is a distributed, open source search and analytics engine."
            }
          }
        ]
      }
    },
    {
      "took": 2,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 5,
        "max_score": 1.0,
        "hits": [
          {
            "_index": "my-index",
            "_type": "_doc",
            "_id": "2",
            "_score": 1.0,
            "_source": {
              "title": "Kibana",
              "body": "Kibana is an open source data visualization and exploration tool."
            }
          }
        ]
      }
    },
    {
      "took": 2,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "

msearch便利そうに見えたが、複雑なクエリーを発行することができなったので、普通のSQLを組んだ方が早かったです。