Koperta:MongoDB pełnym i częściowym Text Search
- MongoDB (3.2.0) z Mongos
Kolekcja:
- użytkowników
Tekst tworzenie indeksu:
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
dokumentu:
- { "name": "leonel"}
Zapytania:
db.users.find({ "$text" : { "$search" : "LEONEL" } })
=> ZNALEZIONOdb.users.find({ "$text" : { "$search" : "leonel" } })
=> FOUND (wyszukiwanie caseSensitive jest fałszywy)db.users.find({ "$text" : { "$search" : "LEONÉL" } })
=> FOUND (search z diacriticSensitive jest fałszywa)db.users.find({ "$text" : { "$search" : "LEONE" } })
=> FOUND (Partial wyszukiwania)db.users.find({ "$text" : { "$search" : "LEO" } })
=> NOT FOUND (Partial wyszukiwania)db.users.find({ "$text" : { "$search" : "L" } })
=> NOT FOUND (Partial wyszukiwania)
Każdy pomysł, dlaczego otrzymuję 0 wyników używając jako zapytania "LEO" lub "L"?
Regex z wyszukiwaniem indeksu tekstowego jest niedozwolony.
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 Dokumentacja:
- 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
Możliwy duplikat [MongoDB: Czy można wykonać zapytanie bez rozróżniania wielkości liter?] (Https://stackoverflow.com/questions/1863399/mongodb-is-it-possible-to-make-a-case- niewrażliwe zapytanie) –
To pytanie jest związane z częściowym wyszukiwaniem przy użyciu indeksu tekstowego i bez rozróżniania wielkości liter. @LucasCosta, proszę nie oznaczać tego pytania jako zduplikowane. – Leonel
Jest to możliwe, potrzebuje co najmniej 5 głosów @Leonel –