在自管理部署上为包含多种语言的集合创建文本索引
您可以创建文本索引,以提高在包含多种语言文本的文档或嵌入式文档的集合上运行文本搜索查询的性能。
如果集合包含多种不同语言的文档或嵌入式文档,请包含一个名为 language
的字段,并将这些文档的语言指定为字段值。 要查看可用于文本索引的语言,请参阅自管理部署上的文本搜索语言。
您的插入操作应类似于以下示例,以支持多种语言的文本索引:
db.<collection>.insertOne( { <field>: <value>, language: <language> } )
开始之前
创建包含多语言文档的quotes
集合,其中包含language
字段:
db.quotes.insertMany( { _id: 1, language: "portuguese", original: "A sorte protege os audazes.", translation: [ { language: "english", quote: "Fortune favors the bold." }, { language: "spanish", quote: "La suerte protege a los audaces." } ] }, { _id: 2, language: "spanish", original: "Nada hay más surrealista que la realidad.", translation: [ { language: "english", quote: "There is nothing more surreal than reality." }, { language: "french", quote: "Il n'y a rien de plus surréaliste que la réalité." } ] }, { _id: 3, original: "Is this a dagger which I see before me?", translation: { language: "spanish", quote: "Es este un puñal que veo delante de mí." } } )
步骤
以下操作在original
和translation.quote
字段上创建文本索引:
db.quotes.createIndex({ original: "text", "translation.quote": "text", "default_language" : "fr" })
注意
英语是索引的默认语言。 如果未指定default_ language ,则查询必须使用$ 语言参数指定语言。 有关详细信息,请参阅为自管理部署的文本索引指定默认语言。
结果
生成的索引支持对包含original
和translation.quote
字段的文档和嵌入式文档进行文本搜索查询。 文本索引遵循不同的后缀词干提取规则,并根据language
字段中的值忽略每种语言特定的停用词。
示例,以下查询搜索french
单词réalité
。
db.quotes.find( { $text: { $search: "réalité" } } )
输出:
[ { _id: 2, language: 'spanish', original: 'Nada hay más surrealista que la realidad.', translation: [ { language: 'english', quote: 'There is nothing more surreal than reality.' }, { language: 'french', quote: "Il n'y a rien de plus surréaliste que la réalité." } ] } ]
对于不包含language
字段的嵌入式文档,
如果封闭文档包含
language
字段,则索引将使用该文档的语言来嵌入文档。否则,索引将使用嵌入式文档的默认语言。
对于不包含language
字段的文档,索引使用默认语言,即英语。
了解详情
要在
language
以外的字段中指定文本索引语言,请参阅使用任何字段在自托管部署上指定文本索引语言。要学习;了解如何为文本索引指定默认语言,请参阅为自托管部署上的文本索引指定默认语言。
要学习;了解其他文本索引属性,请参阅自托管部署上的文本索引属性。