MongoDB: создать текстовый индекс для нескольких полей, каждый на другом языке [дубликат]

Третий матч в google для «C ++ slicing» дает мне эту статью в Википедии http://en.wikipedia.org/wiki/Object_slicing и этот (нагретый, но первые несколько сообщений определяют проблему ): http://bytes.com/forum/thread163565.html

Таким образом, это когда вы назначаете объект подкласса суперклассу. Суперкласс ничего не знает о дополнительной информации в подклассе и не имеет места для его хранения, поэтому дополнительная информация получает «отрезанный».

Если эти ссылки не дают достаточной информации для «хороший ответ», пожалуйста, отредактируйте свой вопрос, чтобы сообщить нам, что еще вы ищете.

4
задан Salvador Dali 5 August 2013 в 19:31
поделиться

2 ответа

Вы специально подразумевали: http://docs.mongodb.org/manual/tutorial/create-text-index-on-multi-language-collection/#use-any-field-to-specify-the -language-for-a-document Предположим, что позволяет вам переопределить язык для целого документа с определенным значением поля.

Что вы хотите от ваш вопрос, вы еще не можете сделать в MongoDB, но эта функция запланирована для предстоящей версии MongoDB. Вы можете отслеживать билет в https://jira.mongodb.org/browse/SERVER-9390

2
ответ дан Derick 20 August 2018 в 14:44
поделиться
  • 1
    Отчет об ошибке кажется помеченным как разрешенный. Не могли бы вы уточнить свой ответ? – rdb 7 October 2016 в 07:59

Ссылки мертвы как от вопроса, так и от исходного ответа, но есть способ определить схему для этого, которая поддерживается в современных версиях.

Рекомендуемым способом было бы включить "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"
    }
  ]
}

И затем предполагая что мы используем «индексный» текстовый индексный текст «english», который мы можем просто индексировать с помощью:

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
ответ дан Neil Lunn 20 August 2018 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: