python - MongoDb startswith和全文索引问题
PHPz
PHPz 2017-04-18 09:38:12
0
1
952

场景是目前有个Mongo的collection中的name字段,name字段长度正常在4-10个中文左右,25W数据量。如果我用startswith匹配name查询的话性能会有怎样的压力呢?
如果给name字段加上全文索引又会有什么样的好处和坏处呢?

PHPz
PHPz

学习是最好的投资!

membalas semua(1)
刘奇

Jika terdapat indeks biasa, pertanyaan dengan awalan tetap boleh menggunakan indeks. Tetapi saya tidak tahu apa yang bermula dengan kaedah yang anda bincangkan Jika ia ada dalam pemandu, ia bergantung pada pemandu dan apa yang dikatakan oleh dokumentasinya. Awalan tetap yang saya maksudkan ialah padanan ungkapan biasa bermula dengan ^, seperti:

db.collection.find({name: /^张/})

Jika anda melihat rancangan pelaksanaan, anda boleh melihat IX_SCAN:

db.collection.find({name: /^张/}).explain(true)

Indeks teks penuh adalah perkara lain. Ringkasnya, anda tidak perlu mempertimbangkan sama ada awalan adalah tetap, tetapi unit asas indeks teks penuh ialah , bukan perkataan. Jadi perenggan berikut:

Divisyen Pertama ialah sekolah yang bagus

Apabila mencari, anda boleh mencari terus perkataan yang anda inginkan, seperti:

db.collection.find({ $text: { $search: "好学校" } })

Tetapi anda mungkin tidak dapat menemuinya jika anda terus mencari "sekolah":

db.collection.find({ $text: { $search: "校" } })  // 无结果

Sudah tentu, ini berkaitan dengan cara pembahagian enjin pembahagian perkataan yang berbeza Contohnya hanya untuk menggambarkan batasan pengindeksan teks penuh.
Selain itu, artikel, pengkuantiti dan perkataan lain yang tidak mempunyai makna sebenar juga akan ditapis, seperti "personaliti":

db.collection.find({ $text: { $search: "个" } })  // 无结果

Selain itu, anda juga mungkin mendapati bahawa pertanyaan di atas tidak menyebut medan name sama sekali, kerana hanya terdapat satu indeks teks penuh pada koleksi.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan