MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Wyszukiwanie tekstowe mongodb przy użyciu wielu języków

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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo jak $szukać za pomocą DBRef

  2. Jak sortować mongodb z pymongo

  3. Jak używać kombinacji $unset i $set w mongoDB

  4. MongoDB $milisekundy

  5. Czy mogę wykonać zapytanie tekstowe za pomocą sterownika mongodb c#?