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

OpenSearch:近くにいる人の検索

最終更新日:Jun 22, 2026

OpenSearch を使用すると、近くにいる人や場所を検索できます。このガイドでは、位置座標を使用して効率的に検索し、結果を距離でソートする方法について説明します。

ソリューション

  1. アプリケーションスキーマで GEO_POINT フィールドを設定し、空間インデックスを使用して結果を取得します。

  2. GEO_POINT フィールド用のデータ処理プラグインを設定します。

  3. テスト検索の構文とソートの追加方法を学びます。

操作手順

1. アプリケーションスキーマの設定

OpenSearch の アプリケーションスキーマ で、地理座標用に DOUBLE 型の lon フィールドと lat フィールドを追加します。次に、company_lon_lat という名前の GEO_POINT フィールドを作成します (フィールド名はカスタマイズ可能です)。インデックススキーマ で、company_lon_lat のアナライザを地理位置アナライザに設定し、属性フィールドとして追加します。インデックスフィールドリストで、company_lng_lat という名前のインデックスを作成し、その含まれるフィールドを company_lon_lat に設定し、分析メソッドとして 地理位置アナライザ を選択します。アプリケーションスキーマの 属性フィールド リストで、company_lon_lat フィールドを見つけ、[属性フィールドとして追加] をクリックして追加します。アプリケーション作成プロセスの詳細については、クイックスタートガイドをご参照ください。

2. データソースの設定

フィールドマッピングを設定する際、company_lon_lat フィールドには StringCatenateExtractor データ処理プラグインを使用します。このプラグインは、既存の経度フィールド lon と緯度フィールド lat を連結します。次に、値をスペースで結合し、その結果をターゲットフィールド company_lon_lat に書き込みます。

備考company_lon_lat ターゲットフィールドのマッピングは無視できます。

プラグインの詳細については、「データ処理プラグイン」をご参照ください。

3. 検索のテスト

query=name:'Alibaba' AND company_lon_lat:'circle(116.5806 39.99624, 1000)' 説明: このクエリは、座標 '116.5806 39.99624' から半径 1,000 メートル (1 km) 以内にある会社 "Alibaba" のドキュメントを検索します。構文query=spatial_index:'circle(LON LAT,Radius)'

  • LON は経度、LAT は緯度、radius はメートル単位の検索半径です。最高のパフォーマンスを得るには、半径を 10 km 以下にすることを推奨します。この範囲を超えると、パフォーマンスが大幅に低下します。

  • 特徴と構文の詳細については、「範囲検索」をご参照ください。

4. 高度ソート式の追加

距離でソートするには、ユーザーの座標を kvpairs パラメーターで渡します: kvpairs=long_lat_in_query:'120.34256 30.56982'

高度ソート式は次のとおりです:

-distance(company_lon_lat, long_lat_in_query)

構文:

distance(location1, location2, outputname, defaultvalue)

パラメーター:

  • location1: GEO_POINT 型のフィールド名。

  • location2: クエリ文字列の kvpairs 句で設定されたフィールド名。値は GEO_POINT フィールドで必須の LON LAT フォーマットである必要があります。

  • outputname: オプション。計算された距離を結果で返すための名前を指定します。

  • defaultvalue: オプション。ドキュメント内の location1 フィールドが無効な場合に返す距離を指定します。省略した場合のデフォルト値は 100000 です。

備考: この例では、long_lat_in_querykvpairs で設定する必要があります。例: kvpairs=long_lat_in_query:120.34256 30.56982