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を組んだ方が早かったです。