问题和原始答案的链接都已失效,但是现代版本中有一种方法可以定义此模式,得到支持。
推荐的方法是在文档或嵌入式文档中包含一个"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",因为它是索引上的默认语言。
索引的项不需要按任何顺序进行排序,这也通过第一个示例文档中的 "translations" 数组中包含 "english" 条目的嵌入式文档进行演示。嵌入项的规则略有不同,因为我们必须在嵌入的文档上包含 "language" 属性,否则实际使用的语言将来自于文档 "root"。在此示例中,数组中任何没有 "language" 属性的嵌入式文档都将被视为使用 "spanish",因为这是在 "root" 中定义的。
搜索当然考虑到索引中存在的所有路径,因此在此处定义的"description"
和嵌入式"translation.description"
属性上进行搜索。适当的“搜索语言”仍然根据$text
运算符的$language
选项指定,因为“停用词”和“词干提取”仍然与此相关,并且在索引创建时设置了默认索引语言。
嵌入式格式还为您提供了一个简单的检索点,以检索“翻译”两种语言之间的语言信息,在这种情况下,它的实用性是“双重”的。
特定文档现已位于在多语言下为集合创建文本索引中,作为指定文本索引的语言更广泛主题中的一个部分,其中包括所有其他细节的链接,包括在索引上指定不同的默认语言。