字符筛选器一次检查一个字符的文本并执行筛选操作。 字符筛选器需要类型字段,有些还需要额外的选项。
"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
htmlStrip字符筛选器去除 HTML 结构。
属性
htmlStrip 字符过滤具有以下属性:
名称 | 类型 | 必需? | 说明 |
|---|---|---|---|
| 字符串 | 是 | 标识此字符筛选器类型的人类可读标签。 值必须是 |
| 字符串数组 | 是 | 包含要从过滤中排除的 HTML 标记的列表。 |
例子
以下索引定义示例使用名为htmlStrippingAnalyzer的自定义分析器为分钟collection中的text.en_US字段编制索引。自定义分析器指定以下内容:
使用
htmlStrip字符筛选器从文本中删除除a标签之外的所有 HTML 标签。Generate tokens based on word break rules from the Unicode Text Segmentation algorithm using the standard tokenizer.
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 | 输出词元 |
|---|---|
|
|
|
|
|
|
icuNormalize
icuNormalize 字符过滤器使用 ICU Normalizer 对文本进行规范化。它基于 Lucene 的 ICUN ormalizer2 CharFilter。
属性
icuNormalize 字符过滤器具有以下属性:
名称 | 类型 | 必需? | 说明 |
|---|---|---|---|
| 字符串 | 是 | 标识此字符筛选器类型的人类可读标签。 值必须是 |
例子
以下索引定义示例使用名为normalizingAnalyzer的自定义分析器为分钟collection中的message字段编制索引。自定义分析器指定以下内容:
使用
icuNormalize字符筛选器对message字段值中的文本进行规范化。使用空格分词器根据单词之间出现的空格对字段中的单词进行分词。
nomessageminutes以下查询在collection的字段中搜索字符串 (数字)的出现次数。
MongoDB Search 将包含 _id: 4 的文档与查询术语no 进行匹配,因为它使用 icuNormalize 字符过滤对该字段中的数字符号 № 进行了规范化,并为单词“number”的印刷缩写创建了词元 no。 ”。MongoDB Search 使用 normalizingAnalyzer 为文档_id: 4 中的 message字段值生成以下词元:
文档 ID | 输出词元 |
|---|---|
|
|
映射
mapping 字符过滤将用户指定的规范化映射应用于字符。它基于 Lucene 的MappingCharFilter。
属性
mapping 字符过滤具有以下属性:
名称 | 类型 | 必需? | 说明 |
|---|---|---|---|
| 字符串 | 是 | 标识此字符过滤器类型的人类可读标签。 值必须是 |
| 对象 | 是 | 包含以逗号分隔的映射列表的对象。 映射表示应用一个字符或一组字符替换另一个字符或一组字符,格式为 |
例子
以下索引定义示例使用名为mappingAnalyzer的自定义分析器为分钟collection中的page_updated_by.phone字段编制索引。自定义分析器指定以下内容:
使用
mapping字符筛选器删除电话字段中连字符 (-)、点 (.)、左括号 (()、右括号 ()) 和空格字符的实例。使用关键字分词器将整个输入分词为单个词元。
以下查询在page_updated_by.phone字段中搜索字符串1234567890 。
MongoDB搜索结果包含一个文档,其中 phone 字符串中的数字与查询字符串匹配。 即使查询不包含电话区号两边的括号以及数字之间的连字符, MongoDB搜索也会将文档与查询字符串进行匹配,因为MongoDB搜索使用 mapping 字符过滤删除了这些字符,并为以下内容创建了单个词元:字段值。 具体来说, MongoDB Search 为具有 _id: 1 的文档中的 phone字段生成了以下词元:
文档 ID | 输出词元 |
|---|---|
|
|
对于搜索 (123)-456-7890、123-456-7890、123.456.7890 等, MongoDB搜索还会将文档与 _id: 1 进行匹配,因为对于如何索引字符串字段字段, MongoDB搜索还使用搜索查询索引(或如果已指定,则使用 searchAnalyzer)。下表显示了MongoDB Search 通过删除查询中的连字符 (-)、点 (.)、左括号 (()、右括号 ()) 和空格字符的实例来创建的词元术语:
查询术语 | 输出词元 |
|---|---|
|
|
|
|
|
|
波斯语
persian 字符过滤器会用空格字符替换零宽度非连接符的实例。这个角色过滤器基于 Lucene 的 PersianCharFilter。
属性
persian 字符过滤器具有以下属性:
名称 | 类型 | 必需? | 说明 |
|---|---|---|---|
| 字符串 | 是 | 标识此字符筛选器类型的人类可读标签。 值必须是 |
例子
以下索引定义示例使用名为persianCharacterIndex的自定义分析器为分钟collection中的text.fa_IR字段编制索引。自定义分析器指定以下内容:
应用
persian字符筛选器,将字段值中的非打印字符替换为空格字符。使用空格分词器根据词之间出现的空格创建标记。
以下查询在text.fa_IR字段中搜索صحبت一词。
MongoDB Search 返回包含查询术语的 _id: 2文档。MongoDB Search 将查询术语与文档进行匹配,方法是首先用空格字符替换零宽度非连接符的实例,然后根据单词之间出现的空格为字段值中的每个单词创建单独的词元。具体来说, MongoDB Search 为包含 _id: 2 的文档生成以下词元:
文档 ID | 输出词元 |
|---|---|
|
|
了解详情
要查看使用 mapping 字符过滤器的其他索引定义和查询,请参阅以下参考页面示例:
shingle 词元过滤器