Env: Mongos ileMongoDB Tam ve Kısmi Metin Arama
- MongoDB (3.2.0)
Koleksiyonu:
- kullanıcıları
Metin Endeksi oluşturma:
BasicDBObject keys = new BasicDBObject();
keys.put("name","text");
BasicDBObject options = new BasicDBObject();
options.put("name", "userTextSearch");
options.put("unique", Boolean.FALSE);
options.put("background", Boolean.TRUE);
userCollection.createIndex(keys, options); // using MongoTemplate
Belge:
- { "name": "LEONEL"}
Sorgular:
BULUNAMADI =>db.users.find({ "$text" : { "$search" : "LEONEL" } })
db.users.find({ "$text" : { "$search" : "leonel" } })
=> BULUNDU (arama CaseSensitive false)db.users.find({ "$text" : { "$search" : "LEONÉL" } })
=> BULUNDUdb.users.find({ "$text" : { "$search" : "LEONE" } })
=> BULUNDU (Kısmi arama)db.users.find({ "$text" : { "$search" : "LEO" } })
=> BULUNAMADI (Kısmi arama)db.users.find({ "$text" : { "$search" : "L" } })
=> BULUNAMADI (Kısmi arama)
Neden "LEO" veya "L" sorgusunu kullanarak 0 sonuç aldığım hakkında bir fikriniz var mı?
Metin Dizini ile düzenli sorgulama Aramaya izin verilmiyor.
db.getCollection('users')
.find({ "$text" : { "$search" : "/LEO/i",
"$caseSensitive": false,
"$diacriticSensitive": false }})
.count() // 0 results
db.getCollection('users')
.find({ "$text" : { "$search" : "LEO",
"$caseSensitive": false,
"$diacriticSensitive": false }})
.count() // 0 results
Mongo Belgeleri: MongoDB 3.4 itibariyle
- https://docs.mongodb.com/v3.2/text-search/
- https://docs.mongodb.com/manual/reference/operator/query/text/
- https://docs.mongodb.com/manual/core/index-text/
- https://jira.mongodb.org/browse/SERVER-15090
Olası kopyası [MongoDB: Büyük/küçük harfe duyarlı bir sorgu oluşturmak mümkün mü?] (Https://stackoverflow.com/questions/1863399/mongodb-is-it-possible-to-make-a-case- duyarsız sorgu) –
Bu soru, bir metin dizini kullanarak ve büyük/küçük harfe duyarlı arama kullanılmayan kısmi arama ile ilgilidir. @LucasCosta lütfen bu soruyu kopyalanmış olarak etiketlemeyin. – Leonel
Bu mümkün, en az 5 oy gerekiyor @Leonel –