すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):TairSearchでboolクエリを使用して複合クエリを実行する

最終更新日:Dec 05, 2024

TairSearchは、全文検索用の社内データ構造であり、Elasticsearchと同様の構文を使用します。 このトピックでは、TairSearchでboolクエリを使用して複合クエリを実装する方法について説明します。

構文

TairSearchは、boolクエリに対して次のタイプの句をサポートしています。

  • must: ドキュメントを返すために必要な要素を指定します。 この句のセマンティクスは、ANDのセマンティクスに似ています。

  • must_not: 返されるドキュメントに含めることができない要素を指定します。 この句のセマンティクスは、NOTのセマンティクスに似ています。

  • should: 返されるドキュメントに対してオプションの要素を指定します。 この句のセマンティクスは、ORのセマンティクスに似ています。 この句と一緒にminimum_should_matchパラメーターを使用して、返されるドキュメントが一致する必要があるshould句の最小数を指定できます。 boolクエリにshould句のみが含まれる場合、このパラメーターは1に設定されます。 boolクエリにmust句またはmust_not句も含まれる場合、このパラメーターは0に設定されます。

    ドキュメントがmust句とshould句の両方に一致する場合、このドキュメントのスコアは複数のヒットの結果として増加します。 これは、結果におけるこの文書のランキングに影響します。

TairSearch_boolboolクエリのこれらの句の優先度は、must_not > must > shouldです。 さらに、boolステートメントまたはその他のステートメントをboolステートメント内にネストして、複合クエリを実装できます。 TairSearchの詳細については、「Search」をご参照ください。

サンプルコード

  1. インデックスを作成します。

    TFT.CREATEINDEX key '{
        "mappings": {
            "properties": {
                "A": { "type": "keyword" },
                "B": { "type": "keyword" },
                "C": { "type": "keyword" }
            }
        }
    }'
  2. ドキュメントデータを追加します。

    TFT.ADDDOC key '{
        "A": "a",
        "B": "b",
        "C": "c"
    }'
  3. データの照会

    例1: SELECT A = aおよびB = b

    TFT.SEARCH key '{
        "query": {
            "bool" : {
                 "must": [
                     { "term": { "A": "a" } },
                     { "term": { "B": "b" } }
                 ]
             }
        }
    }'

    例2: SELECT A = aまたはB = b

    TFT.SEARCH key '{
        "query": {
            "bool": {
                 "should": [
                     { "term": { "A": "a" } },
                     { "term": { "B": "b" } }
                 ]
             }
        }
    }'

    例3: SELECT A = a and B! =b

    TFT.SEARCH key '{
        "query": {
            "bool": {
                "must": [
                     { "term": { "A": "a" } }
                ],
                "must_not": [
                     { "term": { "B": "b" } }
                ]
            }
        }
    }'

    例4: SELECT (A = aおよびB = b) またはC = c

    TFT.SEARCH key '{
        "query": {
            "bool" : {
                "should": [
                    {
                        "bool": {
                            "must": [
                                 { "term": { "A": "a" } },
                                 { "term": { "B": "b" } }
                             ]
                        }
                    },
                    { "term": { "C": "c" }  }
                ]
            }
        }
    }'