MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

mongodb текстово търсене с помощта на няколко езика

Връзките са мъртви както от въпроса, така и от оригиналния даден отговор, но има начин да се дефинира схемата за това, която се поддържа в съвременните версии.

Препоръчителният начин би бил да включите "language" свойство в документа или вградени документи до свойството, което се използва за текстовия индекс. Терминът „до“ означава на „същото ниво“ и не е конкретно в съседство със свойството в индекса.

Нещо обичайно би изглеждало така:

{
  "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"
    }
  ]
}

И тогава, като предположим, че използваме "английски" език на текстовия индекс по подразбиране, можем просто да индексираме с:

db.collection.createIndex({ "description": "text", "translation.description": "text" })

След това MongoDB ще използва "language" свойство, както е показано в документа "root" или от "вградени документи" в масива, и когато е пропуснато, то просто ще използва дефинираната по подразбиране за индекса. Например вторият документ тук няма езиково свойство в "root", така че "english" се предполага, тъй като е по подразбиране в индекса.

Индексираните елементи не трябва да са в никакъв ред, както се демонстрира и от наличието на "english" запис в "translations" масив с вградени документи от първия примерен документ. Правилата за вградените елементи се различават малко по това, че ниетрябва включва "language" свойства на вградените документи или действителният използван език е този от документа "root". В този пример всеки вграден документ в масива без "language" свойството ще се счита, че използва "spanish" тъй като това е дефинирано в "root".

Разбира се, всички търсения се извършват като се вземат предвид всички пътища, присъстващи в индекса, така че и в "description" и вградения "translation.description" свойства, както са дефинирани тук. Подходящият „език за търсене“ все още винаги се използва, както е посочено с $language опция към $text оператора, тъй като „стоп думи“ и „основни“ все още се разглеждат във връзка с това и езика на индекса по подразбиране, зададен при създаването на индекса.

Вграденият формат също така ви дава лесна точка, от която да извлечете информацията за езика за „превеждане“ между два езика, където имате дефинирано съдържание и за двата въпросни езика, така че практичността му е „двойно“ в този случай.

Конкретната документация вече се намира в Създаване на текстов индекс за колекция на множество езици като раздел в по-широката тема на Указване на език за текстов индекс, която включва връзки към всички други подробности, включително определяне на различен език по подразбиране в индекса.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Разгръщане и поддръжка на MongoDB с помощта на Ansible

  2. След като приключите, затворете правилно връзката на mongoose

  3. Mongoose findOneAndUpdate Upsert _id null?

  4. Предимства на MongoDB | Недостатъци на MongoDB

  5. Как да създадете схема на мангуста динамично?