Powiedzmy mam kolekcję Mongo z text index
na polu itemName
z tych 3 dokumentów:
{
_id: ...,
itemName: 'Mashed carrots with big carrot pieces',
price: 1.29
},
{
_id: ...,
itemName: 'Carrot juice',
price: 0.79
},
{
_id: ...,
itemName: 'Apple juice',
price: 1.49
}
Potem Exec zapytanie jak tak :
db.items.find({ $text: { $search: 'Car' } }, { score: { $meta: "textScore" } }).sort({ score: { $meta: "textScore" } });
Jak wymusić Mongo do dokumentów zwrotnych rozpoczynających się od „car” (wielkość liter ma znaczenie) przed powrocie wszelkie inne dokumenty zawierające również „car” trochę gdzie w ciągu znaków itemName
?
Więc chcę odzyskać dokumenty w następującej kolejności:
[
{..., itemName: 'Carrot Juice', ...},
{..., itemName: 'Mashed carrots with big carrot pieces', ...}
]
Oczywiście ten ma być wykorzystywany w funkcji wyszukiwania, co oznacza, że całkowity sens, aby pokazać użytkownikowi elementy wychodząc z jego ciąg wyszukiwania przed wyświetleniem innych elementów po tym.
Do tej pory używałem standardowego wyrażenia regularnego, ale tutaj występ oczywiście jest znacznie gorszy! + ponieważ muszę przeszukiwać wielkość liter, zgodnie z dokumentami, normalne regex nie używa żadnych indeksów w ogóle ?!
EDIT:
Również czasami zachowanie $text
jest bardzo dziwne. Na przykład mam około 10-15 pozycji, gdzie itemName
zaczyna się od słowa "Zwiebel". To zapytanie
db.items.find({ $text: { $search: "Zwiebel" }, supplier_id: 'iNTJHEf5YgBPicTrJ' }, { score: { $meta: "textScore" } }).sort({ score: { $meta: "textScore" } });
działa jak czar i zwraca wszystkie te dokumenty, gdy tego zapytania
db.items.find({ $text: { $search: "Zwie" }, supplier_id: 'iNTJHEf5YgBPicTrJ' }, { score: { $meta: "textScore" } }).sort({ score: { $meta: "textScore" } });
niczego nie wrócić! Tylko zmieniając "Zwiebel" na "Zwie" w $search
.
Naprawdę nie rozumiem, jak to jest możliwe ?!
najlepiej P
Jaki ma to wpływ na sortowanie według textScore? –
proszę sprawdź moją edycję! :-) Dziękuję Ci! –
@PatrickDaVader zobacz moją edycję – felix