对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

字符筛选器

字符筛选器一次检查一个字符的文本并执行筛选操作。 字符筛选器需要类型字段,有些还需要额外的选项。

语法
"charFilters": [
{
"type": "<filter-type>",
"<additional-option>": <value>
}
]

The sample index definitions and queries on this page use the sample collection named minutes. To try these examples, load the minutes collection on your cluster and navigate to the Create a Search Index page in the Atlas UI following the steps in the Create a MongoDB Search Index tutorial. Then, select the minutes collection as your data source, and follow the example procedure to create an index from the Atlas UI or using mongosh.


➤ Use the Select your interface drop-down menu to set the method to run the examples on this page.


MongoDB Search 支持以下类型的字符过滤:

htmlStrip字符筛选器去除 HTML 结构。

htmlStrip 字符过滤具有以下属性:

名称
类型
必需?
说明

type

字符串

标识此字符筛选器类型的人类可读标签。 值必须是htmlStrip

ignoredTags

字符串数组

包含要从过滤中排除的 HTML 标记的列表。

以下索引定义示例使用名为htmlStrippingAnalyzer的自定义分析器为分钟collection中的text.en_US字段编制索引。自定义分析器指定以下内容:

headtext.en_USminutes以下查询在collection的字段中查找字符串 的出现次数。

MongoDB Search 不会返回包含 _id: 1 的文档,因为字符串 head 是 HTML标签<head> 的一部分。 带有 _id: 3 的文档包含 HTML 标记,但字符串 head 在其他位置,因此该文档是匹配项。 下表显示了MongoDB Search 使用 htmlStrippingAnalyzer分钟集合中文档 _id: 1_id: 2_id: 3 中的 text.en_US字段值生成的词元。

文档 ID
输出词元

_id: 1

This, page , deals , with , department , meetings

_id: 2

The, head, of, the, sales, department, spoke, first

_id: 3

We'll, head, out, to, the, conference, room, by, noon

icuNormalize 字符过滤器使用 ICU Normalizer 对文本进行规范化。它基于 Lucene 的 ICUN ormalizer2 CharFilter。

icuNormalize 字符过滤器具有以下属性:

名称
类型
必需?
说明

type

字符串

标识此字符筛选器类型的人类可读标签。 值必须是icuNormalize

以下索引定义示例使用名为normalizingAnalyzer的自定义分析器为分钟collection中的message字段编制索引。自定义分析器指定以下内容:

  • 使用icuNormalize字符筛选器对message字段值中的文本进行规范化。

  • 使用空格分词器根据单词之间出现的空格对字段中的单词进行分词。

nomessageminutes以下查询在collection的字段中搜索字符串 (数字)的出现次数。

MongoDB Search 将包含 _id: 4 的文档与查询术语no 进行匹配,因为它使用 icuNormalize 字符过滤对该字段中的数字符号 进行了规范化,并为单词“number”的印刷缩写创建了词元 no。 ”。MongoDB Search 使用 normalizingAnalyzer 为文档_id: 4 中的 message字段值生成以下词元:

文档 ID
输出词元

_id: 4

write, down, your, signature, or, phone, no

mapping 字符过滤将用户指定的规范化映射应用于字符。它基于 Lucene 的MappingCharFilter。

mapping 字符过滤具有以下属性:

名称
类型
必需?
说明

type

字符串

标识此字符过滤器类型的人类可读标签。

值必须是 mapping

mappings

对象

包含以逗号分隔的映射列表的对象。 映射表示应用一个字符或一组字符替换另一个字符或一组字符,格式为<original> : <replacement>

以下索引定义示例使用名为mappingAnalyzer的自定义分析器为分钟collection中的page_updated_by.phone字段编制索引。自定义分析器指定以下内容:

  • 使用mapping字符筛选器删除电话字段中连字符 ( - )、点 ( . )、左括号 ( ( )、右括号 ( ) ) 和空格字符的实例。

  • 使用关键字分词器将整个输入分词为单个词元。

以下查询在page_updated_by.phone字段中搜索字符串1234567890

MongoDB搜索结果包含一个文档,其中 phone 字符串中的数字与查询字符串匹配。 即使查询不包含电话区号两边的括号以及数字之间的连字符, MongoDB搜索也会将文档与查询字符串进行匹配,因为MongoDB搜索使用 mapping 字符过滤删除了这些字符,并为以下内容创建了单个词元:字段值。 具体来说, MongoDB Search 为具有 _id: 1 的文档中的 phone字段生成了以下词元:

文档 ID
输出词元

_id: 1

1234567890

对于搜索 (123)-456-7890123-456-7890123.456.7890 等, MongoDB搜索还会将文档与 _id: 1 进行匹配,因为对于如何索引字符串字段字段, MongoDB搜索还使用搜索查询索引(或如果已指定,则使用 searchAnalyzer)。下表显示了MongoDB Search 通过删除查询中的连字符 (-)、点 (.)、左括号 (()、右括号 ()) 和空格字符的实例来创建的词元术语:

查询术语
输出词元

(123)-456-7890

1234567890

123-456-7890

1234567890

123.456.7890

1234567890

persian 字符过滤器会用空格字符替换零宽度非连接符的实例。这个角色过滤器基于 Lucene 的 PersianCharFilter。

persian 字符过滤器具有以下属性:

名称
类型
必需?
说明

type

字符串

标识此字符筛选器类型的人类可读标签。 值必须是persian

以下索引定义示例使用名为persianCharacterIndex的自定义分析器为分钟collection中的text.fa_IR字段编制索引。自定义分析器指定以下内容:

  • 应用persian字符筛选器,将字段值中的非打印字符替换为空格字符。

  • 使用空格分词器根据词之间出现的空格创建标记。

以下查询在text.fa_IR字段中搜索صحبت一词。

MongoDB Search 返回包含查询术语的 _id: 2文档。MongoDB Search 将查询术语与文档进行匹配,方法是首先用空格字符替换零宽度非连接符的实例,然后根据单词之间出现的空格为字段值中的每个单词创建单独的词元。具体来说, MongoDB Search 为包含 _id: 2 的文档生成以下词元:

文档 ID
输出词元

_id: 2

ابتدا, رئیس , بخش , فروش , صحبت , کرد

要查看使用 mapping 字符过滤器的其他索引定义和查询,请参阅以下参考页面示例: