テキスト検索を組み合わせて、結果に対して地理空間クエリを実行することが可能かどうか、またはどうすればよいか疑問に思っていました。現在は Mongoose を使用していますが、コマンドに直接 Mongo を使用してもかまいません。
私がやろうとしているのは、ユーザーが製品を検索して、特定の場所にある結果を返せるようにすることです。2 つのコマンドを別々に実行していますが、それらを組み合わせる方法がわかりません。
フィルター パラメーターを追加することで、テキスト検索をフィルター処理できます (私はnode-mongodb-nativeを使用しています)。
db.command({ text: 'thecollection', search: searchString, filter: query }, function(err, o) {
if (err) throw err;
var results = o.results.map(function(result) { return result.obj });
// process the response ...
});
大まかな地理的検索を行う場合は、緯度経度の最小値と最大値を定義して結果をフィルタリングできます。
var distances = {'200m': 0.002, '500m': 0.005, '1km': 0.01, '5km': 0.05 }
, distance = distances[reqDis];
var query = {
latitude: { $lt: reqLat+distance, $gt: reqLat-distance },
longitude: { $lt: reqLng+distance, $gt: reqLng-distance }
};
// put the query in the db.command as described above
これは、mongodb ドキュメントの主題に関するものです: http://docs.mongodb.org/manual/tutorial/limit-number-of-items-scanned-for-text-search/