翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon OpenSearch Service でのデータの検索
URI 検索やリクエストボディ検索など、Amazon OpenSearch Service でドキュメントを検索する一般的な方法がいくつかあります。 OpenSearch サービスは、カスタムパッケージ、SQLサポート、非同期検索など、検索エクスペリエンスを向上させる追加機能を提供します。包括的な OpenSearch 検索APIリファレンスについては、「」のOpenSearch ドキュメント
注記
次のサンプルリクエストは、 で動作します OpenSearch APIs。一部のリクエストでは古い Elasticsearch バージョンを使用できない可能性があります。
トピック
- URI 検索
- リクエストボディ検索
- 検索結果のページ分割
- Dashboards Query Language
- Amazon OpenSearch サービスのカスタムパッケージ
- SQL を使用した Amazon OpenSearch Service データのクエリ
- Amazon OpenSearch Service での k-Narest Neighbor (k-NN) 検索
- Amazon OpenSearch Service でのクラスター間検索
- Amazon OpenSearch Service のランキングを学ぶ
- Amazon OpenSearch Service での非同期検索
- Amazon OpenSearch Service でのポイントインタイム検索
- Amazon OpenSearch Service でのセマンティック検索
- Amazon OpenSearch Service での同時セグメント検索
- を使用した自然言語クエリの生成 OpenSearch
URI 検索
ユニバーサルリソース識別子 (URI) 検索は、最も単純な検索形式です。URI 検索では、クエリをHTTPリクエストパラメータとして指定します。
GET https://search-
my-domain
.us-west-1.
es.amazonaws.com/_search?q=house
以下にレスポンスの例を示します。
{
"took": 25,
"timed_out": false,
"_shards": {
"total": 10,
"successful": 10,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 85,
"relation": "eq",
},
"max_score": 6.6137657,
"hits": [
{
"_index": "movies",
"_type": "movie",
"_id": "tt0077975",
"_score": 6.6137657,
"_source": {
"directors": [
"John Landis"
],
"release_date": "1978-07-27T00:00:00Z",
"rating": 7.5,
"genres": [
"Comedy",
"Romance"
],
"image_url": "http://ia.media-imdb.com/images/M/MV5BMTY2OTQxNTc1OF5BMl5BanBnXkFtZTYwNjA3NjI5._V1_SX400_.jpg",
"plot": "At a 1962 College, Dean Vernon Wormer is determined to expel the entire Delta Tau Chi Fraternity, but those troublemakers have other plans for him.",
"title": "Animal House",
"rank": 527,
"running_time_secs": 6540,
"actors": [
"John Belushi",
"Karen Allen",
"Tom Hulce"
],
"year": 1978,
"id": "tt0077975"
}
},
...
]
}
}
デフォルトでは、このクエリは家という語句をすべてのインデックスのすべてのフィールドで検索します。検索を絞り込むには、 でインデックス (movies
) とドキュメントフィールド (title
) を指定しますURI。
GET https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search?q=title:house
リクエストに追加のパラメータを含めることはできますが、サポートされているパラメータでは、 OpenSearch 検索オプションの小さなサブセットのみが提供されます。次のリクエストは 20 の結果 (デフォルトでは 10) を返し、年ごとに (_score
ではなく) ソートされます。
GET https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search?q=title:house&size=20&sort=year:desc
リクエストボディ検索
より複雑な検索を実行するには、クエリにHTTPリクエスト本文と OpenSearchドメイン固有の言語 (DSL) を使用します。クエリDSLでは、検索 OpenSearch オプションの全範囲を指定できます。
注記
テキストフィールドの値に Unicode 特殊文字を含めることはできません。値は特殊文字で区切られた複数の値として解析されます。このような誤った解析により、意図せずに文書がフィルタリングされ、アクセス制御が損なわれる可能性があります。詳細については、 ドキュメントの「テキストフィールドの Unicode 特殊文字に関する注意事項
次のmatch
クエリは、最終URI検索の例に似ています。
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "size": 20, "sort": { "year": { "order": "desc" } }, "query": { "query_string": { "default_field": "title", "query": "house" } } }
注記
は、リクエスト本文の検索POST
に HTTPGET
と _search
APIを受け入れますが、すべてのHTTPクライアントがリクエストへのGET
リクエスト本文の追加をサポートしているわけではありません。 はより一般的な選択肢POST
です。
多くの場合、いくつかのフィールドを検索する必要がある場合がありますが、すべてのフィールドを検索する必要はありません。multi_match
クエリを使用します。
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title", "plot", "actors", "directors"] } } }
ブーストフィールド
特定のフィールドをブーストすることで、検索の関連性を向上させることができます。ブーストは乗数で、あるフィールドの一致を他のフィールドの一致より重く重み付けします。次の例では、title
フィールドでの John の一致は plot
フィールドの一致の 2 倍で _score
に影響を及ぼし、また actors
または directors
フィールドの一致の 4 倍で影響を及ぼします。その結果、John Wick や John Carter のような映画が検索結果の最上部にあり、John Travolta 主演の映画は最下部にあります。
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "john", "fields": ["title^4", "plot^2", "actors", "directors"] } } }
検索結果のハイライト
highlight
オプションは、クエリが 1 つ以上のフィールドと一致した場合、hits
配列内の追加のオブジェクトを返す OpenSearch ように に指示します。
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } }, "highlight": { "fields": { "plot": {} } } }
クエリが plot
フィールドのコンテンツに一致した場合、ヒットは次のようになります。
{
"_index": "movies",
"_type": "movie",
"_id": "tt0091541",
"_score": 11.276199,
"_source": {
"directors": [
"Richard Benjamin"
],
"release_date": "1986-03-26T00:00:00Z",
"rating": 6,
"genres": [
"Comedy",
"Music"
],
"image_url": "http://ia.media-imdb.com/images/M/MV5BMTIzODEzODE2OF5BMl5BanBnXkFtZTcwNjQ3ODcyMQ@@._V1_SX400_.jpg",
"plot": "A young couple struggles to repair a hopelessly dilapidated house.",
"title": "The Money Pit",
"rank": 4095,
"running_time_secs": 5460,
"actors": [
"Tom Hanks",
"Shelley Long",
"Alexander Godunov"
],
"year": 1986,
"id": "tt0091541"
},
"highlight": {
"plot": [
"A young couple struggles to repair a hopelessly dilapidated <em>house</em>."
]
}
}
デフォルトでは、 は一致する文字列を<em>
タグで OpenSearch ラップし、マッチの周りに最大 100 文字のコンテキストを提供し、句読点、スペース、タブ、改行を識別してコンテンツを文に分割します。これらの設定はすべてカスタマイズ可能です。
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } }, "highlight": { "fields": { "plot": {} }, "pre_tags": "<strong>", "post_tags": "</strong>", "fragment_size": 200, "boundary_chars": ".,!? " } }
カウント API
ドキュメントの内容に関心がなく、一致の数だけを知りたい場合は、 _count
API の代わりに _search
を使用できますAPI。次のリクエストでは、query_string
クエリを使用してロマンチックコメディを識別します。
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_count { "query": { "query_string": { "default_field": "genres", "query": "romance AND comedy" } } }
以下にレスポンスの例を示します。
{
"count": 564,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
}
}
検索結果のページ分割
大量の検索結果を表示する必要がある場合は、さまざまな方法を使用してページネーションを実装できます。
ポイントインタイム
ポイントインタイム (PIT) 機能は、時間に固定されたデータセットに対して異なるクエリを実行できるようにする検索の一種です。これは、特にディープページ分割の場合 OpenSearchに、 で推奨されるページ分割方法です。Service OpenSearch バージョン 2.5 以降PITで を使用できます。PIT の詳細については、「Amazon OpenSearch Service でのポイントインタイム検索」を参照してください。
from
と size
のパラメーター
ページ分割の最も簡単な方法は、from
と size
パラメータを使用した方法です。次のリクエストは、検索結果のゼロから始まるインデックスリストのうち、20~39 までの結果を返します。
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search { "from": 20, "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } } }
検索ページ分割の詳細については、 OpenSearch ドキュメントの「結果のページ分割
Dashboards Query Language
Dashboards クエリ言語 (DQL)
用語のクエリ
用語クエリでは、検索する用語を指定する必要があります。
用語クエリを実行するには、次のように入力します。
host:www.example.com
ブール値クエリ
ブール演算子 AND
、or
、および not
を使用して、複数のクエリを組み合わせることができます。
ブール値クエリを実行するには、次を貼り付けます。
host.keyword:www.example.com and response.keyword:200
日付と範囲のクエリ
日付と範囲のクエリを使用して、クエリの前後の日付を検索できます。
-
>
は、指定した日付より後の日付を検索することを示します。 -
<
は、指定した日付より前の日付を検索することを示します。
@timestamp > "2020-12-14T09:35:33"
ネストされたフィールドのクエリ
ネストされたフィールドを持つドキュメントがある場合は、ドキュメントのどの部分を取得するかを指定する必要があります。ネストされたフィールドを含むサンプルドキュメントを次に示します。
{"NBA players":[ {"player-name": "Lebron James", "player-position": "Power forward", "points-per-game": "30.3" }, {"player-name": "Kevin Durant", "player-position": "Power forward", "points-per-game": "27.1" }, {"player-name": "Anthony Davis", "player-position": "Power forward", "points-per-game": "23.2" }, {"player-name": "Giannis Antetokounmpo", "player-position": "Power forward", "points-per-game":"29.9" } ] }
を使用して特定のフィールドを取得するにはDQL、以下を貼り付けます。
NBA players: {player-name: Lebron James}
ネストされたドキュメントから複数のオブジェクトを取得するには、次を貼り付けます。
NBA players: {player-name: Lebron James} and NBA players: {player-name: Giannis Antetokounmpo}
範囲内を検索するには、次を貼り付けます。
NBA players: {player-name: Lebron James} and NBA players: {player-name: Giannis Antetokounmpo and < 30}
別のオブジェクト内にネストされたオブジェクトがドキュメントにある場合でも、すべてのレベルを指定することでデータを取得できます。これを実行するには、次を貼り付けます。
Top-Power-forwards.NBA players: {player-name:Lebron James}