0

Amazon CloudsearchとAPI Gatewayを統合しています。私は構造化されたクエリフレーズ検索をしようとする場合を除いて、すべてうまくいきます。CloudsearchとAPI Gatewayの構造化クエリフレーズ検索

私はCloudsearch Test Search :(フレーズフィールド=タイトル '検索')でこの構文を使用しています。私は彼らのJSONを見て、彼らはこのようにそれを送信します?

CloudSearchAPI /検索Q =(フレーズ+フィールド%3Dcontent + '検索')& q.parser =構造化

私のAPIがCloudsearch HTTPエンドポイントと統合しますその形式に一致するが、私は正確に同じクエリを実行しようとすると、私は次のようなエラー

APIURL /(フレーズ+フィールド%3Dcontent + '検索')& q.parserの%を取得する3Dstructured

[非推奨:外部メッセージフィールドを使用]

"="記号がクラウド検索エンドポイントに送信される前にデコードされたようです。誰かがこれを克服する方法についての任意のアイデアを持っていますか?

また、私はJavaScriptを使用してAJAXリクエストを送信しています。ここで私は、フレーズ検索をコードしています方法です:

encodeURIComponent("(phrase field=content '" + term + "')") //turns in to: phrase%20field%3Dcontent%20'search' 

私はフィールド=コンテンツ一部

感謝が含まれていない場合、それは動作します!

+0

は、このHTTPまたはHTTP_PROXY統合ますか? –

+0

これはhttpの統合 –

+0

です。あなたはAPIゲートウェイのクエリ文字列パラメータとして 'q.parser'を定義しましたか?また、 'APIURL /(フレーズ+フィールド%3Dcontent + '検索')&q.parser%3Dstructured'が実際に' APIURL /?q =(フレーズ+フィールド%3Dcontent + '検索')&q.parser%3Dstructured' –

答えて

0

ライブラリを使用してAJAXリクエスト(Axios、jQueryなど)を実行している場合は、リクエストを送信する前にその文字列をURIエンコードする必要はありません。私は私のアプリでは、次のフィルタクエリを使用しています(あなたのクエリに非常に似た構文である)、それはencodeURIComponentせずに正常に動作します:

fq: '(term field=search_type_lit \'Suggestion\')'

あなたはAJAXライブラリを使用する前に、その文字列をエンコードする場合(おそらくあなたのためのエンコーディングを提供します)、それはダブルエンコードされ、CloudSearchはそれを有効なクエリ構文として認識しません。

説明すると、等価記号がencodeURIComponentで1回エンコードされ、もう一度AJAXライブラリでエンコードされた場合、これはおそらくイコールサインだけに起こります。

  • エンコードされていなかった:=
  • は一度エンコードされた:二回エンコードされた%3D
  • %253D
関連する問題