1

次のクエリがあります

query = query & Builders<Profile>.Filter.And(query, 
Builders<Profile>.Filter.Regex(p => p.email, '^' + search));

しかし、クエリMongoDbでインデックスを使用できないことはわかっています。regexインデックスを使用して機能する代替手段を実装することは可能ですか? また、たとえば、実装できる正規表現がたくさんあります。文字列の先頭と文字列の末尾、文字列を含むなどで検索します。

私はMongoDb v 3.0.2&を使用しますOfficial c# driver v 2.0

4

1 に答える 1

1

インデックスが正規表現クエリでどのように機能するかについて説明しているMongoDB ドキュメントを参照してください。その要点は、正規表現が「プレフィックス」式である場合にのみインデックスが効率的に使用されることです。つまり、一致する文字列は常に同じ部分文字列で始まります。

そのため、(コード サンプルのように)「文字列の先頭で」検索すると、効率的な方法でインデックスが使用されます。「by string's end」または「contains」の正規表現を使用した検索では、インデックススキャンにのみインデックスを使用でき、インデックスシークには使用できません。インデックス スキャンは、テーブル スキャンよりわずかに高速ですが、これは主に、関連するインデックスが既にメモリに読み込まれている可能性があり、ディスクから読み取る必要がないためです。

編集:代替案について尋ねているので、データに対して効率的な全文検索が本当に必要な場合は、LuceneSolrなどの専用のテキスト検索エンジンを調べることができます。それらをソリューションに組み込むにははるかに多くの労力が必要ですが、フルテキスト クエリは超高速になります。

于 2015-09-23T12:31:02.000 に答える