検索の最適化
このトピックでは、実際の検索プロセスで発生する可能性のある一般的な問題とその解決方法について説明します。検索結果にご満足いただけない場合、または検索機能の使用方法がわからない場合は、Alibaba Cloud にテクニカルサポートをご依頼ください。
検索結果は、クエリ内のキーワードに一致するドキュメントの数によって異なります。キーワードに一致するドキュメントが多いほど、システムが実行する必要がある計算が増え、消費される時間も長くなります。したがって、重要な最適化方法は、クエリで取得されるドキュメントの数を減らすことです。
クエリには、アプリケーションで作成されたインデックスを指定する必要があります。指定しない場合は、デフォルトのインデックスが使用されます。デフォルトのインデックスが存在しない場合は、エラーが発生し、結果は返されません。
query='mp3' is equivalent to query=default:'mp3'. // query='mp3' は query=default:'mp3' と同等です。クエリ文字列内のキーワードは、単一引用符(' ')で囲む必要があります。そうしないと、エラーが発生し、結果が返されない場合があります。
Error: query=default:mp3 // エラー: query=default:mp3 Right: query=default:'mp3' // 正しい形式: query=default:'mp3'キーワードに曲線アポストロフィ(')が含まれている場合は、この文字をエスケープするか削除する必要があります。キーワードの最後の文字はバックスラッシュ(\)にすることはできません。バックスラッシュを使用すると、エスケープ文字として使用され、エラーが発生します。クエリ文字列にバックスラッシュ(\)を含める必要がある場合は、バックスラッシュをエスケープする必要があります。
query=default:'Beijing University' // Beijing と University の両方を含むドキュメントが取得されます。 query=default:'abc's efg' // クエリ文字列が解析に失敗し、結果が返されません。この場合は、クエリ文字列を query=default:'abc\'s efg' に書き直します。 query=default:'abc\' // エラーが発生し、結果が返されません。\ 文字は ' 文字をエスケープします。この場合、クエリ文字列は解析に失敗します。フィールドをフィルタリングするためのクエリを実行する必要がある場合は、フィルタリングするフィールドのインデックスを作成し、クエリ句を使用してフィールドをクエリすることをお勧めします。これにより、クエリのパフォーマンスを向上させることができます。
query=user_id:'123'&&filter=type_id=1 // クエリ文字列を query=user_id:'123' AND type_id:'1' に書き直します。シナリオによっては、先月のデータをクエリする必要があります。データ量が多い場合、クエリのパフォーマンスに影響します。この場合は、範囲検索を使用できます。
query=user_id:'123'&&filter=time>"2016-09-16" // 5,000万件のデータレコードが user_id=123 の条件を満たしています。ただし、指定された時間に基づいて取得されるデータレコードは1,000件のみです。クエリで取得されるデータ量が多い場合、タイムアウトが発生する可能性があります。 この場合は、クエリ文字列を次のように書き直すことができます。 query=user_id:'123' AND index_timestamp:(1473955200000,) // 範囲クエリを使用します。これはより効率的です。特定のドキュメントがクエリされた後、エンジンは返される実際のデータを取得します。結果データの量が多い場合、より多くの時間が消費されます。この場合は、次の最適化方法を使用して検索効果を向上させることができます。方法1:一致するドキュメントの数を減らします。通常、1ページに20件の結果が表示されます。方法2:デフォルトの表示フィールドまたは fetch_fields パラメーターを変更して、検索結果に必要なフィールドのみを返します。