MongoDB Atlas搜索
Atlas Search使在MongoDB数据之上轻松构建基于关联的快速搜索功能成为可能。立即在MongoDB Atlas(我们完全托管的数据库即服务)上试用。
text 索引版本 |
描述 |
---|---|
版本3 | MongoDB引入了text 索引的第3版。版本3是text 在MongoDB 3.2和更高版本中创建的索引的默认版本。 |
版本2 | MongoDB 2.6引入了text 索引的版本2 。版本2是text 在MongoDB 2.6和3.0系列中创建的索引的默认版本。 |
版本1 | MongoDB 2.4引入了text 索引的版本1 。MongoDB 2.4仅支持版本1 。 |
要覆盖默认版本并指定其他版本,请在创建索引时包括该选项。{ "textIndexVersion": <version> }
重要
一个集合最多可以有一个 text
索引。
若要创建text
索引,请使用
db.collection.createIndex()
方法。要为包含字符串或字符串元素数组的字段建立索引,请包括该字段并"text"
在索引文档中指定字符串文字,如以下示例所示:
您可以为索引建立多个字段的text
索引。以下示例text
在字段subject
and
上创建索引comments
:
甲复合索引可以包括text
索引关键字结合升序/降序的索引关键字。有关更多信息,请参见化合物索引。
为了删除text
索引,请使用索引名称。有关更多信息,请参见
使用索引名称删除文本索引。
对于text
索引,索引字段的权重表示就文本搜索分数而言,该字段相对于其他索引字段的重要性。
对于文档中的每个索引字段,MongoDB将匹配数乘以权重并求和。然后,使用此总和,MongoDB计算文档的分数。有关$meta
按文本分数返回和排序的详细信息,请参见运算符。
索引字段的默认权重为1。要调整索引字段的权重,请weights
在db.collection.createIndex()
方法中包括该选项
。
有关使用权重控制文本搜索结果的更多信息,请参见使用权重控制搜索结果。
text
在多个字段上创建索引时,您也可以使用通配符说明符($**
)。使用通配符文本索引,MongoDB会为包含集合中每个文档的字符串数据的每个字段建立索引。下面的示例使用通配符指定符创建文本索引:
该索引允许在具有字符串内容的所有字段上进行文本搜索。如果不清楚要在文本索引中包含哪些字段或用于临时查询,则此类索引对于高度非结构化的数据很有用。
通配符文本索引是text
多个字段上的索引。这样,您可以在创建索引期间将权重分配给特定字段,以控制结果的排名。有关使用权重控制文本搜索结果的更多信息,请参见
使用权重控制搜索结果。
与所有文本索引一样,通配符文本索引可以是复合索引的一部分。例如,以下代码在字段a
以及通配符说明符上创建一个复合索引:
与所有复合文本索引一样,由于a
在文本索引键之前,因此要$text
使用该索引执行
搜索,查询谓词必须包含等式匹配条件a
。有关复合文本索引的信息,请参见复合文本索引。
在版本3.2中更改。
版本3 text
索引支持通用C
,简单S
和土耳其语语言,T
如Unicode 8.0 Character Database Case Folding中指定的特殊情况。
大小写折叠扩展了text
索引对大小写的不敏感性,使其包括带有变音符号的字符,例如和é
和
É
,以及来自非拉丁字母的字符,例如西里尔字母中的“И”和“и”。
该text
索引的第3版也没有变音符号。这样,索引也没有区分之间é
,É
,e
,和E
。
text
索引的先前版本[A-z]
仅不区分大小写
;即不区分大小写,仅对非变音符的拉丁字母无效。对于所有其他字符,早期版本的文本索引将它们视为不同的字符。
在版本3.2中更改。
在版本3中,text
索引不区分音素。即,索引不包含变音符号和它们的未标记的对应,如字符区分é
,ê
和
e
。更具体地说,该text
索引会去除Unicode 8.0字符数据库属性列表中归为变音符号的字符。
text
索引的第3版对带有变音符号的字符也不区分大小写。这样,索引也没有区分之间é
,É
,e
,和E
。
text
索引的先前版本将带变音符号的字符视为不同的字符。
在版本3.2中更改。
对于符号化,第3版text
索引使用下分类的分隔符Dash
,Hyphen
,Pattern_Syntax
,
Quotation_Mark
,Terminal_Punctuation
,和White_Space
中
的Unicode 8.0字符数据库道具列表。
例如,如果给定的一个字符串,该索引对待,和空格作为分隔符。"Il a dit qu'il «était le meilleur
joueur du monde»"
text
«
»
该指数治疗的早期版本«
作为术语的一部分
"«était"
,并»
作为长期的一部分"monde»"
。
MongoDB支持多种语言的文本搜索。text
指数下降特定语言的停用词(如英语,the
,an
,
a
,and
,等)和使用简单的语言特定的后缀而产生。有关支持的语言的列表,请参见文本搜索语言。
如果将语言值指定为"none"
,则text
索引使用简单的标记化,没有停用词列表且没有词干。
sparse
属性¶text
索引总是稀疏的,并且忽略
稀疏选项。如果文档缺少text
索引字段(或者该字段是null
或为空数组),则MongoDB不会将文档条目添加到text
索引中。对于插入,MongoDB插入文档但不添加到text
索引中。
对于包含text
索引键和其他类型的键的复合索引,只有text
索引字段才能确定索引是否引用文档。其他键不能确定索引是否引用文档。
一个集合最多可以有一个 text
索引。
阿化合物索引可以包括text
与上升/下降的索引关键字在组合索引键。但是,这些复合索引具有以下限制:
text
索引不能包含任何其他特殊索引类型,例如多键或
地理空间索引字段。text
索引在
索引键之前包含键,则要text
执行$text
搜索,查询谓词必须在前面的键上包含相等匹配条件。text
索引时,所有text
索引键必须在索引规范文档中相邻列出。另请参阅文本索引和排序以获取其他限制。
有关复合文本索引的示例,请参见 限制扫描的条目数。
要删除text
索引,请将索引名称传递给
db.collection.dropIndex()
方法。要获取索引的名称,请运行该db.collection.getIndexes()
方法。
有关text
索引的默认命名方案以及覆盖默认名称的信息,请参见
为文本Index指定名称。