You are currently viewing OpenSearch 複雑なクエリを考えてみる

OpenSearch 複雑なクエリを考えてみる

前回までのエントリで大まかにクエリの種類を見てみました
ただ、実際に検索処理を作ろうとしたら、複数の条件の組み合わせが発生するはずなので
今回のエントリでは少し複雑なクエリの作成方法を考えて見たいと思います

今回も、データはOpenSearch付属のe-commerceサンプルデータを利用します

QueryDSLを利用する場合

QueryDSLを利用する場合、「複合クエリ」を利用して複数のクエリを組み合わせることができます
例えば「SKUがZOで始まり、かつtotal_unique_productsが1のもの」という条件は以下のように組み立てられます

GET opensearch_dashboards_sample_data_ecommerce/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "sku": "ZO*"
          }
        },
        {
          "term": {
            "total_unique_products": {
              "value" : "1"
            }
          }
        }
      ]
    } 
  }
}

mustをshouldに変更すると、OR条件として利用することができます(mustはand条件と等価)

外側を更にBoolクエリで囲むことで、「「(SKUがZOで始まり、かつtotal_unique_productsが1) または 顧客名がElyで始まるもの」のようなクエリも作ることができます

ただ、ここまで来るとかなりJSONのインデントも深くなってきて、ぱっとみわかりにくいクエリになっているように思えます。
業務で利用する場合はかなり複雑なクエリになりそうですが、どうやって組み立てているんでしょうね?

以上です

今回はちょっと複雑なクエリを組むにはどうすればよいのか考えてみました
これをプログラムから利用するにはどうすればいいのか、ちょっと考えてみたいと思います

コメントを残す