LoginSignup
7
5

More than 1 year has passed since last update.

OpenSearch でいろいろやってみる ~絞り込み編~

Posted at

絞り込み編

OpenSearchを触ってみた個人的メモ代わりです。

  1. OpenSearch でいろいろやってみる ~インストール編~
  2. OpenSearch でいろいろやってみる ~インデックス編~
  3. OpenSearch でいろいろやってみる ~絞り込み編~ (👈ココ)
  4. OpenSearch でいろいろやってみる ~Aggregation編~

絞り込みしてみる

全文検索は一旦置いといて、基本的な絞り込みを試してみた。
対象となるデータはインデックス編参照

単純な文字列一致

term
GET reviews/_search
{
  "query": {
    "term": {
      "product_cd": "SAMPLE0001"
    }
  }
}

検索はとりあえず_searchにJSONを送り付ければできる。
"送り付ける"と言っても、GETでもPOSTでも同じっぽいですな。
これは一番シンプルな形として。

複数条件(AND/OR)

bool
GET reviews/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "product_cd": {
              "value": "SAMPLE0001"
            }
          }
        },
        {
          "term": {
            "star": {
              "value": 2
            }
          }
        }
      ],
      "should": [
        {
          "term": {
            "product_cd": {
              "value": "SAMPLE0002"
            }
          }
        }
      ]
    }
  }
  "size": 10
}

"bool"を使う、"must"はAND、"should"はORに相当する。
条件ごとの関係に合わせて適宜ネストするところが、最初はとっつきにくい。。。
また、"size"プロパティで取得件数も指定可能。

filter

GET reviews/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "product_cd": {
              "value": "SAMPLE0001"
            }
          }
        }
      ]
    }
  },
  "size": 10
}

filterによる絞り込みも可能。
スコアを算出しない(影響されない)ので、全文検索以外は基本filterで良さそう。

SQL

ここまでいろいろやってみて、今更感あるが、
実はSQLでクエリーすることも可能。

sql
POST _plugins/_sql
{
  "query": "SELECT * FROM reviews"
}

内部でDSLに読み替えてるのかな?
とは言ってもDBでやるような複雑なAggregationや多数のJOINは(まだ)無理。
こんなエラーが返ってくる↓

"Aggregation type nested is not yet implemented"

次回はいよいよ(?)Aggregaion系をやってみようと思う。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5