您可以创建文本索引,以提高在包含多种语言文本的文档或嵌入式文档的集合上运行文本搜索查询的性能。
如果集合包含多种不同语言的文档或嵌入式文档,请包含一个名为 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,则查询必须使用 $ 语言参数指定语言。有关更多信息,请参阅为自管理MongoDB上的文本索引指定语言。
结果
生成的索引支持对包含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以外的字段中指定文本索引语言,请参阅在自托管部署上指定文本索引语言。要学习;了解其他文本索引属性,请参阅自托管部署上的文本索引属性。