为自管理部署指定文本索引的默认语言
默认情况下,文本索引的 default_language
为 english
。为提高非英语文本搜索查询的性能,您可以指定与文本索引相关的不同默认语言。
与索引数据关联的默认语言决定了后缀词干提取规则。默认语言还确定哪些特定于语言的停用词(例如英语中的 the
、an
、a
和 and
)未编入索引。
要指定不同的语言,请在创建文本索引时使用default_language
选项。 要查看可用于文本索引的语言,请参阅自管理部署上的文本搜索语言。 您的操作应类似于以下原型:
db.<collection>.createIndex( { <field>: "text" }, { default_language: <language> } )
如果将 default_language
值指定为 none
,文本索引会解析字段中的每个词,包括停用词,并忽略后缀词干。
开始之前
创建一个 quotes
集合,其中包含以下带有西班牙语文本字段的文档:
db.quotes.insertMany( [ { _id: 1, quote : "La suerte protege a los audaces." }, { _id: 2, quote: "Nada hay más surrealista que la realidad." }, { _id: 3, quote: "Es este un puñal que veo delante de mí?" }, { _id: 4, quote: "Nunca dejes que la realidad te estropee una buena historia." } ] )
步骤
以下操作在 quote
字段上创建文本索引,并将 default_language
设置为 spanish
:
db.quotes.createIndex( { quote: "text" }, { default_language: "spanish" } )
结果
生成的索引支持使用西班牙语后缀词干提取规则对 quote
字段进行文本搜索查询。例如,以下查询在 quote
字段中搜索关键字 punal
:
db.quotes.find( { $text: { $search: "punal" } } )
输出:
[ { _id: 3, quote: "Es este un puñal que veo delante de mí?" } ]
虽然 $search
值设置为 punal
,但查询将返回包含单词 puñal
的文档,因为文本索引对变音符不敏感。
该索引还忽略了特定语言的停止词。例如,虽然带有 _id: 2
的文档包含词语 hay
,但以下查询不会返回任何文档。hay
被归类为西班牙语停止词,即不包含在文本索引中。
db.quotes.find( { $text: { $search: "hay" } } )
了解详情
要为包含多种语言文本的集合创建文本索引,请参阅在自管理部署上为包含多种语言的集合创建文本索引。
要学习;了解其他文本索引属性,请参阅自托管部署上的文本索引属性。