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

Tablestore:ワイルドカード検索

最終更新日:Aug 08, 2026

Tablestore SDK for Go でワイルドカード検索を使用して、アスタリスク (*) および疑問符 (?) を用いて値またはトークンを照合します。

前提条件

Tablestore Go SDK をインストールし、クライアントを初期化します。

概要

ワイルドカード検索では、アスタリスク (*) を使用して 0 文字以上の任意の文字列に一致させ、疑問符 (?) を使用して 1 文字に一致させます。Text フィールドに対しては、トークン化された term に対して検索が適用されます。照合は大文字と小文字を区別し、クエリ文字列の長さは最大 32 文字です。

func (client *tablestore.TableStoreClient) Search(request *tablestore.SearchRequest) (*tablestore.SearchResponse, error)

次の例ではデータを検索し、最大 10 行と一致した行の総数を返します。

tableName := "example_table"
indexName := "example_index"

query := &search.WildcardQuery{FieldName: "category", Value: "book-*"}
searchQuery := search.NewSearchQuery().
    SetQuery(query).
    SetLimit(10).
    SetGetTotalCount(true)

response, err := client.Search(&tablestore.SearchRequest{
    TableName:   tableName,
    IndexName:   indexName,
    SearchQuery: searchQuery,
    ColumnsToGet: &tablestore.ColumnsToGet{
        ReturnAllFromIndex: true,
    },
})
if err != nil {
    log.Fatal(err)
}

fmt.Println(response.TotalCount)
fmt.Println(response.Rows)

パラメーター

検索リクエスト

request は tablestore.SearchRequest 型であり、以下のパラメーターを含みます。

名前

型

説明

TableName (必須)

string

データテーブルの名前です。

IndexName (必須)

string

検索インデックスの名前。

SearchQuery (必須)

search.SearchQuery

検索条件および一般的な検索構成です。

ColumnsToGet (オプション)

*tablestore.ColumnsToGet

返却する列の構成です。このパラメーターを省略すると、プライマリキー列のみが返されます。

RoutingValues (オプション)

[]*tablestore.PrimaryKey

カスタムルーティングフィールドのプライマリキー値です。カスタムルーティングが設定されていない場合は、このパラメーターを省略します。

TimeoutMs (オプション)

*int32

リクエストのタイムアウト期間(ミリ秒単位)です。

検索構成

search.NewSearchQuery() を呼び出して検索構成を作成し、以下のメソッドで構成します。

名前

型

説明

SetQuery (必須)

search.Query

検索条件を指定します。

SetOffset (オプション)

int32

開始位置を指定します。デフォルト値は 0 です。オフセットベースのページネーションでは、Offset + Limit の合計が 100,000 を超えてはなりません。

SetLimit (オプション)

int32

返却する最大行数を指定します。デフォルト値は 10、最大値は 100 です。0 を指定すると、行は返されません。

SetHighlight (オプション)

*search.Highlight

Text フィールドのサマリーおよびハイライトを構成します。詳細については、「サマリーおよびハイライト」をご参照ください。

SetCollapse (オプション)

*search.Collapse

検索結果を折りたたみます。詳細については、「検索結果の折りたたみ」をご参照ください。

SetSort (オプション)

*search.Sort

結果のソート順を指定します。詳細については、「結果のソートとページネーション」をご参照ください。

SetGetTotalCount (オプション)

bool

一致したすべての行をカウントするかどうかを指定します。デフォルト値は false です。

SetToken (オプション)

[]byte

前回の応答で返された NextToken 値を指定します。このメソッドは、トークンに前ページのソート条件が含まれているため、Sort をクリアします。トークンベースのページネーションを使用する場合は、Offset を指定しないでください。

SetSearchFilter (オプション)

*search.SearchFilter

検索後のフィルターを適用します。詳細については、「検索後のフィルターの使用」をご参照ください。

Aggregation (オプション)

...search.Aggregation

集約を構成します。詳細については、「集約」をご参照ください。

GroupBy (オプション)

...search.GroupBy

グループ化を構成します。詳細については、「集約」をご参照ください。

検索条件

検索条件は search.WildcardQuery 型であり、以下のパラメーターを含みます。

名前

型

説明

FieldName (必須)

string

検索対象のインデックスフィールド名です。

Value (必須)

string

ワイルドカード検索文字列です。最大 32 文字まで指定できます。

返却列

request.ColumnsToGet は tablestore.ColumnsToGet 型であり、以下のパラメーターを含みます。

名前

型

説明

Columns (オプション)

[]string

返却する属性列です。ReturnAll および ReturnAllFromIndex の両方が false の場合にのみ有効です。

ReturnAll (オプション)

bool

データテーブル内のすべての属性列を返すかどうかを指定します。デフォルト値は false です。

ReturnAllFromIndex (オプション)

bool

インデックスされたすべての属性列を返すかどうかを指定します。デフォルト値は false です。このパラメーターと ReturnAll を同時に true に設定しないでください。

応答

Search メソッドは tablestore.SearchResponse 値を返します。次の表は、主要なビジネスフィールドについて説明しています。

名前

型

説明

TotalCount

int64

一致した行の総数です。この値は SetGetTotalCount の設定に依存します。

Rows

[]*tablestore.Row

現在の検索で返された行です。行数は SetLimit で指定された値を超えることはありません。

SearchHits

[]*tablestore.SearchHit

検索ヒットです。ハイライト、ネストされた inner hits、または関連スコアを使用する場合は、このフィールドを読み取ります。

NextToken

[]byte

次のページのトークンです。値が空でない場合は、次回の検索に渡します。

IsAllSuccess

bool

すべてのインデックスパーティションが検索されたかどうかを示します。false の場合、部分的な結果が返され、TotalCount が実際の一致行数より少なくなる可能性があります。

AggregationResults

search.AggregationResults

集約結果です。

GroupByResults

search.GroupByResults

グループ化結果です。

使用例

部分文字列検索のパフォーマンス向上

*word* のような検索パターンでは、多次元インデックス作成時に Text フィールドにファジーアナライザを設定し、そのフィールドに対してフレーズ一致検索を使用することを推奨します。この方法は、部分文字列の一致において通常、ワイルドカード検索よりも優れたパフォーマンスを発揮します。一致ルールおよび制限事項については、「トークンベースのワイルドカード検索」をご参照ください。

次の例では、file_name フィールドを含む多次元インデックスを作成し、そのフィールドにファジーアナライザを設定します。

analyzer := tablestore.Analyzer_Fuzzy
fieldSchema := &tablestore.FieldSchema{
    FieldName:         proto.String("file_name"),
    FieldType:         tablestore.FieldType_TEXT,
    Index:             proto.Bool(true),
    Analyzer:          &analyzer,
    AnalyzerParameter: tablestore.FuzzyAnalyzerParameter{},
}

request := &tablestore.CreateSearchIndexRequest{
    TableName: "example_table",
    IndexName: "example_index",
    IndexSchema: &tablestore.IndexSchema{
        FieldSchemas: []*tablestore.FieldSchema{fieldSchema},
    },
}

_, err := client.CreateSearchIndex(request)
if err != nil {
    log.Fatal(err)
}

インデックスデータの同期後、MatchPhraseQuery を使用して、file_name フィールドに任意の位置で word を含む行を検索します。

query := &search.MatchPhraseQuery{
    FieldName: "file_name",
    Text:      "word",
}
searchQuery := search.NewSearchQuery().
    SetQuery(query).
    SetLimit(10)

response, err := client.Search(&tablestore.SearchRequest{
    TableName:   "example_table",
    IndexName:   "example_index",
    SearchQuery: searchQuery,
    ColumnsToGet: &tablestore.ColumnsToGet{
        ReturnAllFromIndex: true,
    },
})
if err != nil {
    log.Fatal(err)
}

fmt.Println(response.Rows)

ワイルドカードパターンに一致する行を除外

SQL の NOT LIKE に相当する処理を実現するには、WildcardQuery を BoolQuery.MustNotQueries に追加します。

wildcardQuery := &search.WildcardQuery{
    FieldName: "category",
    Value:     "book-*",
}
query := &search.BoolQuery{
    MustNotQueries: []search.Query{wildcardQuery},
}
searchQuery := search.NewSearchQuery().
    SetQuery(query).
    SetLimit(10)

response, err := client.Search(&tablestore.SearchRequest{
    TableName:   "example_table",
    IndexName:   "example_index",
    SearchQuery: searchQuery,
    ColumnsToGet: &tablestore.ColumnsToGet{
        ReturnAllFromIndex: true,
    },
})
if err != nil {
    log.Fatal(err)
}

fmt.Println(response.Rows)