db.customer.find({'name': /.*s.*/i})
pymongo的寫法如下:
rexExp = re.compile('.*s.*', re.IGNORECASE)
db.customer.find({'name':rexExp })
或者
db.customer.find({'name': {'$regex':'.*s.*'} })
為提高查詢效率,添加索引{'name':1}
測試結果:無法命中索引
要想命中索引,還得改下查詢條件,查詢必須符合2點
- 必須是s開頭的,而不能是s在中間
- 必須是大小寫敏感的
那么,查詢看起來應該是這個樣子:
db.customer.find({'name': /^s.*/})
pymongo的寫法如下:
rexExp = re.compile('^s.*')
db.customer.find({'name':rexExp })
omg,看來單靠mongodb是很難滿足實際的應用場景,所以還是另外考慮其它搜索引擎做為全文索引的補充吧,lucene系列(solr,elasticSearch)或sphinx都可以考慮下