Linki nie działają zarówno w odpowiedzi na pytanie, jak i w oryginalnej odpowiedzi, ale istnieje sposób na zdefiniowanie schematu, który jest obsługiwany w nowoczesnych wersjach.
Zalecanym sposobem byłoby dołączenie "language"
właściwość w dokumencie lub dokumentach osadzonych obok właściwości używanej w indeksie tekstowym. Termin „obok” oznacza „na tym samym poziomie” i nie przylega konkretnie do właściwości w indeksie.
Wyglądałoby to na coś powszechnego:
{
"description": "Texto largo en español",
"language": "spanish",
"translation": [
{
"description": "Large text in Spanish",
"language": "english"
},
{
"description": "Grand texte en espagnol",
"language": "french"
}
]
},
{
"description": "The quick brown fox",
"translation": [
{
"description": "Le renard brun rapide",
"language": : "french"
}
]
}
A następnie zakładając, że używamy „domyślnego” języka indeksu tekstu „angielski”, możemy po prostu indeksować za pomocą:
db.collection.createIndex({ "description": "text", "translation.description": "text" })
MongoDB użyje wtedy "language"
Właściwość pokazana w dokumencie „root” lub z „osadzone dokumenty” w tablicy, a jeśli zostanie pominięta, po prostu użyje wartości domyślnej zdefiniowanej dla indeksu. Na przykład drugi dokument tutaj nie ma właściwości języka w „root”, więc "english"
zakłada się, ponieważ jest to ustawienie domyślne w indeksie.
Indeksowane elementy nie muszą być w dowolnej kolejności, co również wykazano, mając "english"
wpis w "translations"
tablica z osadzonymi dokumentami przy pierwszym przykładowym dokumencie. Zasady dotyczące elementów osadzonych różnią się nieco tym, że musimy dołącz "language"
właściwości na osadzonych dokumentach lub rzeczywisty język używany z dokumentem „root”. W tym przykładzie dowolny osadzony dokument w tablicy bez "language"
uważa się, że właściwość używa "spanish"
ponieważ to jest zdefiniowane w "root".
Wyszukiwania są oczywiście wykonywane z uwzględnieniem wszystkich ścieżek obecnych w indeksie, więc zarówno w "description"
i osadzony "translation.description"
właściwości zgodnie z definicją tutaj. Właściwy "język wyszukiwania" jest zawsze używany, jak określono w $language
opcja $text
operatora, ponieważ "słowa stop" i "pochodzenie" są nadal brane pod uwagę w odniesieniu do tego i domyślnego języka indeksu ustawionego podczas tworzenia indeksu.
Wbudowany format zapewnia również łatwy punkt, z którego można pobrać informacje o języku w celu „przetłumaczenia” między dwoma językami, w przypadku których treść jest zdefiniowana dla obu omawianych języków, więc w tym przypadku jest to praktyczność „podwójna”.
Szczegółowa dokumentacja znajduje się teraz w sekcji Utwórz indeks tekstowy dla kolekcji w wielu językach jako sekcja w szerszym temacie Określanie języka dla indeksu tekstowego, który zawiera łącza do wszystkich innych szczegółów, w tym określania innego domyślnego języka w indeksie.