使用任意字段在自管理部署上指定文本索引语言
文本索引的语言决定了运行文本搜索查询时用于解析词干和忽略停用词的规则。
默认,如果文本索引没有默认语言,则索引使用 language
文档字段来确定其使用的语言。 因此,文本索引不限于单一语言,因为language
字段的值可能会因文档而异。
您可以更改索引用于确定其语言的字段。 如果您的字段名称不是英文,并且您的文档没有名为language
的字段,这非常有用。
要在language
以外的字段中指定文本索引语言,请在创建索引时包含language_override
选项:
db.<collection>.createIndex( { <field> : "text" }, { language_override: "<field>" } )
文本索引使用language_override
选项中指定的字段来确定相应文档使用的语言。
对于不包含language_override
中指定字段的文档,索引使用英语作为其语言。
开始之前
创建 quotes
集合:
db.quotes.insertMany( [ { _id: 1, idioma: "portuguese", quote: "A sorte protege os audazes" }, { _id: 2, idioma: "spanish", quote: "Nada hay más surrealista que la realidad." }, { _id: 3, idioma: "english", quote: "is this a dagger which I see before me" } ] )
每个报价的语言在idioma
字段中指定。
步骤
在quote
字段上创建文本索引。 指定language_override
选项以使文本索引使用该语言的idioma
字段:
db.quotes.createIndex( { quote : "text" }, { language_override: "idioma" } )
结果
该索引支持对quote
字段进行文本搜索查询,并使用基于idioma
字段中指定的语言的语言规则。 每个文档在idioma
字段中指定不同的值,这意味着每个文档使用不同的语言规则进行搜索。
以以下示例为例:
Atlas Search有效术语
以下查询搜索string audazes
:
db.quotes.find( { $text: { $search: "audazes" } } )
输出:
[ { _id: 1, idioma: 'portuguese', quote: 'A sorte protege os audazes' } ]
前面的查询使用葡萄牙语作为完成查询的语言。
Atlas Search的停用词
以下查询搜索string hay
:
db.quotes.find( { $text: { $search: "hay" } } )
即使string hay
出现在文档 _id: 2
的 quote
字段中,前面的查询也不会返回结果。
文档_id: 2
指定语言为西班牙语。 hay
在西班牙语中被视为停用词,因此不包含在文本索引中。
了解详情
要查看文本索引可用的语言,请参阅自管理部署上的文本搜索语言。
要学习;了解如何为整个文本索引指定默认语言,请参阅为自管理部署上的文本索引指定默认语言。
要查看文本索引限制,请参阅自管理部署的文本索引限制。