

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# FT.SEARCH
<a name="vector-search-commands-ft.search"></a>

指定されたインデックスの検索を実行します。クエリ式に一致するキーが返されます。

```
FT.SEARCH <index-name> <query>
[NOCONTENT]
[RETURN <token_count> (<field-identifier> [AS <alias>])+]
[TIMEOUT timeout] 
[PARAMS <count> <name> <value> [<name> <value>]]
[LIMIT <offset> <count>]
```
+ <index> (必須): クエリを実行するこのインデックス名。
+ <query> (必須): クエリ文字列。詳細については、以下を参照してください。
+ NOCONTENT (オプション): 存在する場合、結果のキー名のみが返されます。キー値は含まれません。
+ TIMEOUT <timeout> (オプション): 検索コマンドのタイムアウト値を設定できます。これはミリ秒単位の整数である必要があります。
+ PARAMS <count> <name1> <value1> <name2> <value2> ... (オプション): `count` は引数の数、つまり値名のペアの数の 2 倍になります。使用状況の詳細については、クエリ文字列を参照してください。
+ RETURN <count> <field1> <field2> ... (オプション): count は返すフィールドの数です。ドキュメントから取得するフィールドと、返される値のエイリアスを指定します。デフォルトでは、NOCONTENT オプションが設定されている場合を除き、すべてのフィールドが返されます。NOCONTENT オプションが設定されている場合は、フィールドは返されません。count を 0 に設定すると、NOCONTENT と同じように動作します。
+ LIMIT: <offset> <count>: 結果の一部を選択できます。最初の <offset> キーはスキップされ、最大 <count> 個のキーのみが含まれます。デフォルトは LIMIT 0 10 で、最大 10 個のキーを返します。
+ PARAMS: key-value ペアの数の 2 倍。Param の key/value ペアはクエリ式内から参照できます。詳細については、「[ベクトル検索クエリ式](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-overview.html#vector-search-query-expression)」を参照してください。
+ DIALECT: <dialect> (オプション): 方言を指定します。サポートされている方言は 2 のみです。

**応答**

このコマンドでは、成功した場合は配列が返され、失敗した場合はエラーが返されます。

成功すると、応答配列の最初のエントリは一致するキーの数を表し、一致するキーごとに 1 つの配列エントリがその後に続きます。`LIMIT` オプションが指定されている場合は、返されるキーの数のみが制御され、最初のエントリの値には影響しないことに注意してください。

`NOCONTENT` が指定されている場合は、応答内の各エントリには一致するキー名のみが含まれます。それ以外の場合、各エントリには一致するキー名が含まれ、返されたフィールドの配列がその後に続きます。キーの結果フィールドは、名前と値のペアのセットで構成されます。最初の名前と値のペアは、計算された距離用です。このペアの名前は、ベクトルフィールド名の先頭に「\$1\$1」が付き、末尾に「\$1score」が付く形で構成され、値は計算された距離になります。残りの名前と値のペアは、`RETURN` 句によって制御されるキーのメンバーと値です。

クエリ文字列は次の構文に準拠しています。

```
<filtering>=>[ KNN <K> @<vector_field_name> $<vector_parameter_name> <query-modifiers> ]
```

コードの説明は以下のとおりです。
+ <filtering>: \$1 またはフィルター式です。\$1 はフィルタリングが行われないことを示し、インデックス内のすべてのベクトルが検索されます。フィルター式を提供して、検索対象のベクトルのサブセットを指定できます。
+ <vector\$1field\$1name>: 指定されたインデックス内のベクトルフィールドの名前。
+ <K>: 返される最も近い近傍ベクトルの数。
+ <vector\$1parameter\$1name>: KNN アルゴリズムのクエリベクトルを提供する対応する値を持つ PARAM 名。このパラメータは、リトルエンディアン形式の 32 ビット IEEE 754 バイナリ浮動小数点としてエンコードする必要があることに注意してください。
+ <query-modifiers>: (オプション) この特定の KNN 検索を変更するキーワードと値のペアのリスト。現在、次の 2 つのキーワードがサポートされています。
  + このキーワードには、インデックス作成時に指定された EF\$1RUNTIME のデフォルト値を上書きする整数値が付随します。
  + AS: このキーワードには、結果のスコアフィールドの名前となる文字列値が付随しており、デフォルトのスコアフィールド名生成アルゴリズムが上書きされます。

**フィルター式**

フィルター式は、括弧内に含まれるタグと数値の検索演算子の論理的な組み合わせとして構成されます。

**タグ**:

タグ検索演算子は、\$1 文字で区切られた 1 つ以上の文字列で指定されます。指定されたフィールドに指定された文字列のいずれかが含まれている場合、キーはタグ検索演算子を満たします。

```
@<field_name>:{<tag>}
or
@<field_name>:{<tag1> | <tag2>}
or
@<field_name>:{<tag1> | <tag2> | ...}
```

例えば、次のクエリは、青または黒または緑の色のドキュメントを返します。

`@color:{blue | black | green}`

別の例として、次のクエリは「hello world」または「hello universe」を含むドキュメントを返します。

`@description:{hello world | hello universe}`

**数値範囲**

数値範囲演算子を使用すると、クエリをフィルタリングして、指定した開始値と終了値の間にある値のみを返すことができます。包含範囲クエリと排他範囲クエリの両方がサポートされています。単純なリレーショナル比較では、範囲クエリで \$1inf、-inf を使用できます。範囲検索演算子の構文は次のとおりです。

```
@<field_name>:[ [(] <bound> [(] <bound>]
```

...<bound> は数値、または \$1inf もしくは -inf のいずれかです。先頭に開き括弧がない境界は包含的であり、先頭に開き括弧がある境界は排他的です。

次のテーブルは、数式をフィルタリングクエリにマッピングするためのガイドとして使用します。

```
min <= field <= max         @field:[min max]
min < field <= max          @field:[(min max]
min <= field < max            @field:[min (max]
min < field < max            @field:[(min (max]
field >= min                @field:[min +inf]
field > min                    @field:[(min +inf]
field <= max                @field:[-inf max]
field < max                    @field:[-inf (max]
field == val                @field:[val val]
```

**論理演算子**

複数のタグ検索演算子と数値検索演算子を使用して、論理演算子で複雑なクエリを構築できます。

**論理 AND**

論理 AND を設定するには、述語の間にスペースを入れます。例えば、次のようになります。

`query1 query2 query3`

**論理 OR**

論理 OR を設定するには、述語の間にスペースを入れます。例えば、次のようになります。

`query1 | query2 | query3`

**論理否定**

クエリは、各クエリの前に `-` 文字を付加することで否定できます。負のクエリは、クエリと一致しないエントリをすべて返します。これには、フィールドを持たないキーも含まれます。

例えば、@genre:\$1comedy\$1 に関する負のクエリは、コメディではないすべての書籍と、ジャンルフィールドを持たないすべての書籍を返します。

次のクエリは、2015 年から 2024 年の間に出版されていない、または年フィールドがない「コメディ」ジャンルのすべての書籍を返します: @genre:[comedy] -@year:[2015 2024]

**演算子の優先順位**

一般的な演算子の優先順位ルールが適用されます。つまり、論理 NEGATE が最も優先順位が高く、次に論理 AND、そして論理 OR が最も優先順位が低くなります。括弧を使用して、デフォルトの優先順位ルールを上書きできます。

*論理演算子の組み合わせの例*

論理演算子を組み合わせて複雑なフィルター式を形成することができます。

次のクエリは、2015 年から 2024 年の間に出版された「コメディ」または「ホラー」ジャンル (AND) のすべての書籍を返します: `@genre:[comedy|horror] @year:[2015 2024]`

次のクエリは、2015 年から 2024 年の間に出版された「コメディ」または「ホラー」ジャンル (OR) のすべての書籍を返します: `@genre:[comedy|horror] | @year:[2015 2024]`

次のクエリは、2015 年から 2024 年の間に出版された、ジャンルフィールドがないか、ジャンルフィールドが「コメディ」ではないすべての書籍を返します: `-@genre:[comedy] @year:[2015 2024]`