Amazon OpenSearch Service でのデータの検索 - Amazon OpenSearch サービス

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

Amazon OpenSearch Service でのデータの検索

URI 検索やリクエストボディ検索など、Amazon OpenSearch Service でドキュメントを検索する一般的な方法がいくつかあります。 OpenSearch サービスは、カスタムパッケージ、SQLサポート、非同期検索など、検索エクスペリエンスを向上させる追加機能を提供します。包括的な OpenSearch 検索APIリファレンスについては、「」のOpenSearch ドキュメントを参照してください。

注記

次のサンプルリクエストは、 で動作します OpenSearch APIs。一部のリクエストでは古い Elasticsearch バージョンを使用できない可能性があります。

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 特殊文字に関する注意事項 OpenSearch」を参照してください。

次の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_searchAPIを受け入れますが、すべての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 WickJohn 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 でのポイントインタイム検索」を参照してください。

fromsize のパラメーター

ページ分割の最も簡単な方法は、fromsize パラメータを使用した方法です。次のリクエストは、検索結果のゼロから始まるインデックスリストのうち、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) を使用して、 OpenSearch Dashboards でデータとビジュアライゼーションを検索できます。DQL は、用語 ブール値 日付と範囲 ネストされたフィールド の 4 つの主要なクエリタイプを使用します。

用語のクエリ

用語クエリでは、検索する用語を指定する必要があります。

用語クエリを実行するには、次のように入力します。

host:www.example.com

ブール値クエリ

ブール演算子 ANDor、および 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}