3.3.11 supports case insensitive index(照合を使用している)を見つけた後、私は4000万レコードのデータベースを再構築しました。代わりに、大文字と小文字を区別しない検索に固有の小文字のフィールドとそのインデックスMongoDBの大文字と小文字を区別しないインデックスが "パフォーマンスの問題で始まる"
私がしたことは、作成時に自分のコレクションの照合をsuggested hereとしてMongoDBに依頼することでした。私は次のように直接クエリを試してみましたが、コレクションロードした後
db.createCollection("users", {collation:{locale:"en",strength:1}})
:だから私は、全体のコレクションのケース非感受性を可能にするためにこれをした
db.users.find({full_name:"john doe"})
を...と50回の結果と〜10msの中にそれらのリターン。大文字と小文字は区別されません。しかし、私のような何かしてみてください:
db.users.find({full_name:/^john/})
...か...
db.users.find({full_name:/^john/i})
を...そしてこれは5分以上かかります。私はとても失望していた。 explain()
を実行した後、インデックスが使用されているように見えますが、クエリの実行に時間がかかりすぎます。これは、バグや不完全な開発リリースに起因することができますか、私は根本的に何か間違っているのですか?
私は "starts with"正規表現検索を行っているので、クエリは高速でなければなりません。何か案は?
こんにちは!私たちは3.4に移行してあなたの質問を見つけました。問題の原因を見つけましたか?最新の3.3.xで正常に動作していますか?ありがとう.. – Ruben
実際には動作していません。 3.4をインストールし、https://docs.mongodb.com/master/reference/command/setFeatureCompatibilityVersion/#dbcmd.setFeatureCompatibilityVersionでデータベースを3.4にアップグレードし、新しいコレクション(既定の照合、en、強度2)を作成し、11をインポートしました。 (正規表現は/^find/iと似ています) – wpfwannabe
真新しいデータベースと上のすべてのステップがあっても、それは瞬時ではありません。おそらく私のコメントは誤解を招いていたでしょう。それは動作していますが、正規表現では遅いです。完全な単語で検索すると(部分一致ではなく、非常に高速です)。 – wpfwannabe