Docs 菜单
Docs 主页
/
MongoDB Manual
/ / / /

使用任意字段在自管理部署上指定文本索引语言

在此页面上

  • 开始之前
  • 步骤
  • 结果
  • Atlas Search有效术语
  • Atlas Search的停用词
  • 了解详情

文本索引的语言决定了运行文本搜索查询时用于解析词干和忽略停用词的规则。

默认,如果文本索引没有默认语言,则索引使用 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字段中指定不同的值,这意味着每个文档使用不同的语言规则进行搜索。

以以下示例为例:

以下查询搜索string audazes

db.quotes.find(
{
$text: { $search: "audazes" }
}
)

输出:

[
{ _id: 1, idioma: 'portuguese', quote: 'A sorte protege os audazes' }
]

前面的查询使用葡萄牙语作为完成查询的语言。

以下查询搜索string hay

db.quotes.find(
{
$text: { $search: "hay" }
}
)

即使string hay 出现在文档 _id: 2quote 字段中,前面的查询也不会返回结果。

文档_id: 2指定语言为西班牙语。 hay在西班牙语中被视为停用词,因此不包含在文本索引中。

后退

多种语言