mongo で次のようなクエリを作成したとき、データベースには約200 万のドキュメントがあります。
db.collection.ensure_index("location")
db.collection.find({"location.name": {"$regex": 'norway', "$option": 'i'}}, {"_id:0", 'userid': 1, 'username': 1})
位置検索用の mongo ドキュメント サンプル:
Mongodb document: {"location": {id:3235726, name: Oslo, Norway }}
インデックス作成では、 cache_time部分が指定されていないため、デフォルトが使用されます。現在、2 秒または 4 秒後にデータが表示されますが、これは非常に悪いことです。最も悪いのは、場所が見つからない場合で、検索操作に約25 秒かかりました。今回は python time.time()メソッドを使ってマッピングしました。次に、100 個のドキュメントに対してのみクエリにlimit()を設定すると、少しうまく機能します。しかし、そこに制限を設けた場合、私にとってのユースケースは何ですか。skip()を使用すると、検索中に非常に広範囲になります。
他の部分では、次のようなユーザーIDを使用してデータを検索している場合、正規表現タイプのクエリは含まれていません:
db.collection.ensure_index("userid")
db.collection.find({"userid": 1213444}, {"_id:0", 'user_rank': 1, 'username': 1})
id は整数で非常に高速であるため、非常に効率的に機能します。唯一の違いは、正規表現を使用してロケーション クエリの部分で「like」クエリを使用していることと、mongo docs正規表現で調べたところ、パフォーマンスの点では悪くありません。
インデックス作成を効率的に使用するため、またはmongo_connector を介してすべての mongo ドキュメントのインデックスを作成し、mongodb から solr にデータを同期するApache Solr検索エンジンを使用するために、現在 1.5G のサーバーの物理メモリを増やす必要があります (データを直接 solr にインデックス作成することは非常に膨大です)。記憶の条件)?
私は自分の問題ステートメントに全力を尽くしました。問題ステートメントに何か問題がある場合はお知らせください。改善するために最善を尽くすことができます。
編集:mongoでelasticsearchを使用する必要がありますか? インデックスの有無にかかわらず検索結果が遅すぎるため、最大時間のように260ミリ秒と高すぎる