词元筛选器
在此页面上
- asciiFolding
- 属性
- 例子
- daitchMokotoffSoundex
- 属性
- 例子
- edgeGram
- 属性
- 例子
- englishPossessive
- 属性
- 例子
- flattenGraph
- 属性
- 例子
- icuFolding
- 属性
- 例子
- icuNormalizer
- 属性
- 例子
- kStemming
- 属性
- 例子
- 长度
- 属性
- 例子
- lowercase
- 属性
- 示例
- nGram
- 属性
- 例子
- porterStemming
- 属性
- 例子
- 正则表达式(Regex)
- 属性
- 例子
- reverse
- 属性
- 例子
- shingle
- 属性
- 例子
- snowballStemming
- 属性
- 例子
- spanishPluralStemming
- 属性
- 例子
- stempel
- 属性
- 例子
- stopword
- 属性
- 例子
- trim
- 属性
- 例子
- wordDelimiterGraph
- 属性
- 例子
词元筛选器执行如下操作:
提取词干,这会将相关词语(例如“talking”、“talked”和“talks”)缩减为词根“talk”。
编辑,这会从公共文档中删除敏感信息。
词元筛选器始终需要使用类型字段,某些词元筛选器还采用额外的选项。它采用以下语法:
"tokenFilters": [ { "type": "<token-filter-type>", "<additional-option>": <value> } ]
以下示例索引定义和查询使用名为 minutes
的 示例集合 。如果将 minutes
集合添加到 Atlas 集群中的数据库,您可以从 Atlas UI 上的 Atlas Search 可视化编辑器或 JSON 编辑器中创建以下样本索引,并针对该集合运行样本查询。要创建这些索引,请在 Atlas UI 中选择所需的配置方法后选择数据库和集合,然后优化索引,添加使用词元过滤器的自定义分析器。
注意
asciiFolding
词元过滤将 Basic Latin Unicode区块 asciiFolding
中没有的字母、数字和符号 unicode 字符转换为等效的 ASCII 字符(如果可用)。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
| 字符串 | no | 此字符串指定在词元过滤器的输出中是否包含或省略原始词元。值可以是以下值之一:
默认值: |
例子
以下索引定义使用名为 asciiConverter
的自定义分析器对 minutes 集合中的 page_updated_by.first_name
字段进行索引。自定义分析器指定以下内容:
应用标准分词器,以根据分词规则创建词元。
应用
asciiFolding
词元筛选器,以将字段值转换为等效的 ASCII 字符。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
asciiConverter
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 asciiFolding。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分,单击 Add Field Mapping 可对 page_updated_by.first_name字段应用自定义分析器。
选择 page_updated_by.first_name(位于 Field Name 下拉菜单中),然后从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
asciiConverter
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "mappings": { "dynamic": false, "fields": { "page_updated_by": { "type": "document", "dynamic": false, "fields": { "first_name": { "type": "string", "analyzer": "asciiConverter" } } } } }, "analyzers": [ { "name": "asciiConverter", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "asciiFolding" } ] } ] }
以下查询使用等效的 ASCII 字符在 minutes 集合的 first_name
字段中搜索名称。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "Sian", "path": "page_updated_by.first_name" } } }, { "$project": { "_id": 1, "page_updated_by.last_name": 1, "page_updated_by.first_name": 1 } } ])
[ { _id: 1, page_updated_by: { last_name: 'AUERBACH', first_name: 'Siân'} } ]
Atlas Search 在结果中返回具有 _id: 1
的文档,因为 Atlas Search 为文档中的 page_updated_by.first_name
字段创建了以下词元(可搜索字词),然后使用该词元与查询字词 Sian
进行匹配:
字段名称 | 输出词元 |
---|---|
|
|
daitchMokotoffSoundex
daitchMokotoffSoundex
词元筛选器根据 Daitch-Mokotoff Soundex 为发音相同的单词创建词元 语音算法。此筛选器可以为每个输入生成多个编码,其中每个编码的词元是一个6位数字。
注意
不要在以下位置中使用 daitchMokotoffSoundex
词元筛选器:
synonym 或 autocomplete 类型映射定义。
启用了
fuzzy
的操作符。Atlas Search 在以下操作符中支持fuzzy
选项:
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
| 字符串 | no | 此字符串指定在词元过滤器的输出中是否包含或省略原始词元。值可以是以下值之一:
默认值: |
例子
以下索引定义使用名为 dmsAnalyzer
的自定义分析器对 minutes 集合中的 page_updated_by.last_name
字段进行索引。自定义分析器指定以下内容:
应用标准分词器,以根据分词规则创建词元。
应用
daitchMokotoffSoundex
词元过滤器,对发音相同的单词的标记进行编码。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
dmsAnalyzer
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉菜单中选择 daitchMokotoffSoundex,然后为 originalTokens 字段选择下表中显示的值:
字段值originalTokens
include
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分,单击 Add Field Mapping 可对 page_updated_by.last_name字段应用自定义分析器。
选择 page_updated_by.last_name(位于 Field Name 下拉菜单中),然后从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
dmsAnalyzer
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "mappings": { "dynamic": false, "fields": { "page_updated_by": { "type": "document", "dynamic": false, "fields": { "last_name": { "type": "string", "analyzer": "dmsAnalyzer" } } } } }, "analyzers": [ { "name": "dmsAnalyzer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "daitchMokotoffSoundex", "originalTokens": "include" } ] } ] }
以下查询在分钟集合的 page_updated_by.last_name
字段中搜索听起来类似于 AUERBACH
的词语。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "AUERBACH", "path": "page_updated_by.last_name" } } }, { "$project": { "_id": 1, "page_updated_by.last_name": 1 } } ])
[ { "_id" : 1, "page_updated_by" : { "last_name" : "AUERBACH" } } { "_id" : 2, "page_updated_by" : { "last_name" : "OHRBACH" } } ]
Atlas Search 返回包含 _id: 1
和 _id: 2
的文档,因为两个文档中的词语在语音上相似,并使用相同的 6 位数字(097400
和 097500
)进行编码。下表显示了 Atlas Search 为结果中的文档创建的词元(可搜索词语和 6 位数字编码):
文档 ID | 输出词元 |
---|---|
|
|
|
|
edgeGram
edgeGram
词元筛选器将文本输入左侧(或“边缘”)的输入拆分为 n 个配置大小的词语。
注意
通常,词元筛选器的运行方式与管道类似,每个输入词元生成不超过 1 个输出词元,然后将其输入到后续词元中。相比之下,edgeGram
词元筛选器是一种图表生成筛选器,它从单个输入词元中生成多个输出词元。
由于 synonym 和 autocomplete 字段类型映射定义仅在与非图表生成词元过滤器一起使用时才有效,因此,您无法在 synonym 或 autocomplete 字段类型映射定义中使用 edgeGram 词元过滤器。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
| 整型 | 是 | 指定生成的 n 个词语的最小长度的数字。值必须小于或等于 |
| 整型 | 是 | 指定生成的 n 个词语的最大长度的数字。值必须大于或等于 |
| 字符串 | no | 字符串,用于指定对短于
如果指定了 默认值: |
例子
以下索引定义使用名为 titleAutocomplete
的自定义分析器对 minutes 集合中的 title
字段进行索引。自定义分析器指定以下内容:
应用标准分词器,以根据分词规则创建词元。
将以下筛选器应用于词元:
icuFolding
词元筛选器,用于将字符折叠应用于词元。edgeGram
词元筛选器,用于从左侧创建 4 到 7 个字符长的词元。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
titleAutocomplete
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 icuFolding,然后单击 Add token filter 以将词元过滤器添加到您的自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉菜单中选择 edgeGram,然后在字段中输入下表中显示的值:
字段值minGram
4
maxGram
7
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 以对标题字段应用自定义分析器。
从 Field Name 下拉列表中选择 Title(标题),然后从 Data Type 下拉列表中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
titleAutocomplete
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "analyzer": "titleAutocomplete", "mappings": { "dynamic": false, "fields": { "title": { "type": "string", "analyzer": "titleAutocomplete" } } }, "analyzers": [ { "name": "titleAutocomplete", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "icuFolding" }, { "type": "edgeGram", "minGram": 4, "maxGram": 7 } ] } ] }
以下查询在 minutes 集合的 title
字段中搜索以 mee
开头并后跟任意数量的其他字符的词语。
db.minutes.aggregate([ { "$search": { "wildcard": { "query": "mee*", "path": "title", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 3, title: 'The regular board meeting' } ]
Atlas Search 返回包含 _id: 1
和 _id: 3
的文档,因为这些文档包含与查询条件匹配的词语 meeting
。具体来说,Atlas Search 为结果中的文档创建以下 4 到 7 个字符长的词元(可搜索词语),然后将其与查询词语 mee*
进行匹配:
文档 ID | 输出词元 |
---|---|
|
|
|
|
englishPossessive
englishPossessive
词元筛选器从词语中删除所有格(末尾的 's
)。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
例子
以下索引定义使用名为 englishPossessiveStemmer
的自定义分析器对 minutes 集合中的 title
字段进行索引。自定义分析器指定以下内容:
应用标准分词器,以根据分词规则创建词元(搜索词语)。
应用englishPossessive 词元筛选器从词元中删除所有格(末尾的
's
)。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
englishPossessiveStemmer
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 englishPossessive。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 以对标题字段应用自定义分析器。
从 Field Name 下拉列表中选择 Title(标题),然后从 Data Type 下拉列表中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
englishPossessiveStemmer
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "englishPossessiveStemmer" } } }, "analyzers": [ { "name": "englishPossessiveStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "englishPossessive" } ] } ] }
以下查询在 minutes 集合的 title
字段中搜索词语 team
。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "team", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 2, title: 'The check-in with sales team' } ]
Atlas Search 返回在 title
字段中包含 team
术语的结果。Atlas Search 会返回包含 _id: 1
的文档,因为 Atlas Search 在分析过程中将 title
字段中的 team's
转换为令牌 team
。具体来说,Atlas Search 会对结果中的文档创建以下令牌(可搜索术语),然后将其与查询术语匹配:
文档 ID | 输出词元 |
---|---|
|
|
|
|
flattenGraph
flattenGraph
词元过滤器将词元过滤器图表转换为适合编制索引的平面形式。如果使用 wordDelimiterGraph 词元过滤器,请在 wordDelimiterGraph 词元过滤器后面使用该过滤器。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
例子
以下索引定义使用名为 wordDelimiterGraphFlatten
的自定义分析器为分钟集合中的 message
字段编制索引。自定义分析器指定以下内容:
应用空格分词器,以根据词语之间出现的空格创建词元。
将以下过滤器应用于词元:
wordDelimiterGraph 词元筛选器,用于根据子词拆分词元,为原始词生成词元,并保护词
SIGN_IN
免遭分隔。flattenGraph 词元过滤器,用于将词元扁平化为平面形式。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
wordDelimiterGraphFlatten
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 whitespace。
展开 Token Filters,然后单击 Add token filter。
从下拉菜单中选择 wordDelimiterGraph,并为词元筛选器配置以下字段。
选择以下字段:
字段值delimiterOptions.generateWordParts
true
delimiterOptions.preserveOriginal
true
在
protectedWords.words
字段中输入SIGN_IN
。选择
protectedWords.ignoreCase
。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉列表中选择 flattenGraph。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 以在message(消息)字段上应用自定义分析器。
从 Field Name 下拉列表中选择 message(消息),并从 Data Type 下拉列表中选择String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
wordDelimiterGraphFlatten
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "mappings": { "fields": { "message": { "type": "string", "analyzer": "wordDelimiterGraphFlatten" } } }, "analyzers": [ { "name": "wordDelimiterGraphFlatten", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "wordDelimiterGraph", "delimiterOptions" : { "generateWordParts" : true, "preserveOriginal" : true }, "protectedWords": { "words": [ "SIGN_IN" ], "ignoreCase": false } }, { "type": "flattenGraph" } ] } ] }
以下查询在 minutes 集合的 message
字段中搜索词语 sign
。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "sign", "path": "message" } } }, { "$project": { "_id": 1, "message": 1 } } ])
[ { _id: 3, message: 'try to sign-in' } ]
Atlas Search 在查询词语sign
的结果中返回包含_id: 3
的文档,即使该文档在title
字段中包含带连字符的词语sign-in
。 wordDelimiterGraph 词元筛选器创建词元筛选器图表,而flattenGraph 词元筛选器将词元筛选器图表转换为适合编制索引的平面形式。 具体来说,Atlas Search 为结果中的文档创建以下词元(可搜索词语),然后将其与查询词语sign
进行匹配:
文档 ID | 输出词元 |
|
|
icuFolding
icuFolding
词元筛选器应用 Unicode30 技术报告中的字符折叠 # 例如删除重音、大小写折叠、规范重复项折叠以及报告中详细介绍的许多其他功能。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
例子
以下索引定义使用名为 diacriticFolder
的自定义分析器对 minutes 集合中的 text.sv_FI
字段进行索引。自定义分析器指定以下内容:
应用关键字分词器,以将字符串字段中的所有词语作为单个词语进行分词。
使用
icuFolding
词元筛选器应用折叠,例如删除重音、大小写折叠、规范重复项折叠等。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
diacriticFolder
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 keyword。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 icuFolding。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 text.sv_FI嵌套字段应用自定义分析器。
选择 text.sv_FI(嵌套在 Field Name 下拉菜单中),然后从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
diacriticFolder
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "analyzer": "diacriticFolder", "mappings": { "fields": { "text": { "type": "document", "fields": { "sv_FI": { "analyzer": "diacriticFolder", "type": "string" } } } } }, "analyzers": [ { "name": "diacriticFolder", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "icuFolding" } ] } ] }
以下查询使用 wildcard 操作符在 minutes 集合的 text.sv_FI
字段中搜索所有包含词语 avdelning
(前后具有任意数量的其他字符)的词语。
db.minutes.aggregate([ { "$search": { "index": "default", "wildcard": { "query": "*avdelning*", "path": "text.sv_FI", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "text.sv_FI": 1 } } ])
[ { _id: 1, text: { sv_FI: 'Den här sidan behandlar avdelningsmöten' } }, { _id: 2, text: { sv_FI: 'Först talade chefen för försäljningsavdelningen' } } ]
Atlas Search 在结果中返回包含 _id: 1
和 _id: 2
的文档,因为这些文档包含查询词 avdelning
,在具有 _id: 1
的文档中后跟其他字符,在具有 _id: 2
的文档中前后包含其他字符。具体来说,Atlas Search 为结果中的文档创建以下词元,然后将其与查询词 *avdelning*
进行匹配。
文档 ID | 输出词元 |
---|---|
|
|
|
|
icuNormalizer
icuNormalizer
词元筛选器使用标准 Unicode 规范化模式对词元进行规范化。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
| 字符串 | no | 要应用的规范化形式。接受的值为:
要了解有关支持的规范化形式的更多信息,请参阅 第 1.2节:规范化形式,UTR# 。15 默认值: |
例子
以下索引定义使用名为 textNormalizer
的自定义分析器对 minutes 集合中的 message
字段进行索引。自定义分析器指定以下内容:
使用空格分词器根据词之间出现的空格创建标记。
使用
icuNormalizer
词元筛选器,通过兼容性分解和随后的规范组合对词元进行规范化。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
textNormalizer
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 whitespace。
展开 Token Filters,然后单击 Add token filter。
从下拉菜单中选择 icuNormalizer,然后从 normalizationForm 下拉菜单中选择
nfkc
。单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 以在message(消息)字段上应用自定义分析器。
从 Field Name 下拉列表中选择 message(消息),并从 Data Type 下拉列表中选择String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
textNormalizer
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "analyzer": "textNormalizer", "mappings": { "fields": { "message": { "type": "string", "analyzer": "textNormalizer" } } }, "analyzers": [ { "name": "textNormalizer", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "icuNormalizer", "normalizationForm": "nfkc" } ] } ] }
以下查询在 minutes 集合的 message
字段中搜索词语 1
。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "1", "path": "message" } } }, { "$project": { "_id": 1, "message": 1 } } ])
[ { _id: 2, message: 'do not forget to SIGN-IN. See ① for details.' } ]
Atlas Search 在查询词 1
的结果中返回包含 _id: 2
的文档,即使该文档在 message
字段中包含带圆圈的数字 ①
,因为 icuNormalizer
词元筛选器使用 nfkc
规范化形式为该字符创建 1
词元。下表显示了 Atlas Search 使用 nfkc
规范化形式为结果中的文档创建的词元(可搜索词语),并比较了它为其他规范化形式创建的词元。
规范化形式 | 输出词元 | matches |
|
| X |
|
| X |
|
| √ |
|
| √ |
kStemming
kStemming
词元筛选器将算法词干提取与内置的英语词典结合使用,以提取词语的词干。它要求使用小写文本,而不会修改大写文本。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
例子
以下索引定义使用名为 kStemmer
的自定义分析器对 minutes 集合中的 text.en_US
字段进行索引。自定义分析器指定以下内容:
应用标准分词器,以根据分词规则创建词元。
将以下筛选器应用于词元:
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
kStemmer
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 lowercase,然后单击 Add token filter 以将词元过滤器添加到您的自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉列表中选择 kStemming。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 text.en_US嵌套字段应用自定义分析器。
选择 text.en_US(嵌套在 Field Name 下拉菜单中),然后从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
kStemmer
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "analyzer": "kStemmer", "mappings": { "dynamic": true }, "analyzers": [ { "name": "kStemmer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "kStemming" } ] } ] }
以下查询在 minutes 集合的 text.en_US
字段中搜索词语 Meeting
。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "Meeting", "path": "text.en_US" } } }, { "$project": { "_id": 1, "text.en_US": 1 } } ])
[ { _id: 1, text: { en_US: '<head> This page deals with department meetings. </head>' } } ]
Atlas Search 返回包含_id: 1
的文档,其中包含小写的复数词语meetings
。 Atlas Search 将查询词与文档进行匹配,因为lowercase词元筛选器将词元文本规范化为小写,而kStemming 词元筛选器允许 Atlas Search 将文档text.en_US
字段中的复数meetings
与单数查询词进行匹配。 Atlas Search 还使用索引分析器(如果指定,则使用searchAnalyzer
)分析查询词。 具体来说,Atlas Search 为结果中的文档创建以下词元(可搜索词语),然后使用这些词元匹配查询词语:
head
, this
, page
, deal
, with
, department
, meeting
, head
长度
length
词元筛选器删除太短或太长的词元。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
| 整型 | no | 指定词元的最大长度的数字。值必须小于或等于 默认值: |
| 整型 | no | 指定词元的最大长度的数字。值必须大于或等于 默认值: |
例子
以下索引定义使用名为 longOnly
的自定义分析器对 minutes 集合中的 text.sv_FI
字段进行索引。自定义分析器指定以下内容:
使用标准分词器,以根据分词规则创建词元。
将以下筛选器应用于词元:
icuFolding 词元过滤器,用于应用字符折叠。
length
词元筛选器,它仅对分词后至少为 20 个 UTF-16 代码单元长的词元进行索引。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
longOnly
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 icuFolding,然后单击 Add token filter 以将词元过滤器添加到您的自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉菜单中选择 length 并为词元筛选器配置以下字段:
字段值min
20
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 text.sv.FI 嵌套字段应用自定义分析器。
从 Field Name 下拉菜单中选择嵌套的 text.sv.FI,并从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
longOnly
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "mappings": { "fields": { "text": { "type": "document", "dynamic": true, "fields": { "sv_FI": { "type": "string", "analyzer": "longOnly" } } } } }, "analyzers": [ { "name": "longOnly", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "icuFolding" }, { "type": "length", "min": 20 } ] } ] }
以下查询在 minutes 集合的 text.sv_FI
字段中搜索词语 forsaljningsavdelningen
。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "forsaljningsavdelningen", "path": "text.sv_FI" } } }, { "$project": { "_id": 1, "text.sv_FI": 1 } } ])
[ { _id: 2, text: { sv_FI: 'Först talade chefen för försäljningsavdelningen' } } ]
Atlas Search 返回包含 _id: 2
的文档,其中包含词语 försäljningsavdelningen
。Atlas Search 将文档与查询词语进行匹配,因为该词语超过 20 个字符。此外,虽然查询词语 forsaljningsavdelningen
不包含变音符号,但 Atlas Search 折叠文档中的原始词语的变音符号以将查询词语与文档进行匹配。具体来说,Atlas Search 为包含 _id: 2
的文档创建以下词元(可搜索词语)。
forsaljningsavdelningen
Atlas Search 不会返回集合的 text.sv_FI
字段中的任何其他词语的搜索结果,因为该字段中的所有其他词语都少于 20 个字符。
lowercase
lowercase
词元筛选器将词元文本规范化为小写。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
示例
以下示例索引定义使用 nGram
分词策略为 minutes 集合中的 title
字段构建 autocomplete 类型的索引。它会对 title
字段应用名为 keywordLowerer
的自定义分析器。自定义分析器指定以下内容:
应用关键字分词器为字符串或字符串数组创建单个词元。
应用
lowercase
词元筛选器将词元文本转换为小写。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
keywordLowerer
。如果 Tokenizer 已折叠,请将其展开,然后从下拉菜单中选择 keyword。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 lowercase,然后单击 Add token filter 以将词元过滤器添加到您的自定义分析器中。
在 Field Mappings 部分中,单击 Add Field Mapping 以对标题字段应用自定义分析器。
从 Field Name 下拉菜单中选择 title(标题),并从 Data Type 下拉菜单中选择 Autocomplete(自动完成)。
在数据类型的属性部分中,从属性的下拉菜单中选择以下值:
属性名称值Analyzer
keywordLowerer
Tokenization
nGram
单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下内容:
{ "mappings": { "fields": { "title": { "analyzer": "keywordLowerer", "tokenization": "nGram", "type": "autocomplete" } } }, "analyzers": [ { "name": "keywordLowerer", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "lowercase" } ] } ] }
以下查询使用 autocomplete 操作符在 title
字段中搜索字符 standup
。
db.minutes.aggregate([ { "$search": { "index": "default", "autocomplete": { "query": "standup", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 4, title: 'The daily huddle on tHe StandUpApp2' } ]
Atlas Search 返回结果中包含 _id: 4
的文档,因为该文档包含查询词 standup
。Atlas Search 使用 keyword
分词器、lowercase
词元筛选器和 autocomplete 类型的 nGram
分词策略为 title
字段创建词元。具体来说,Atlas Search 使用 keyword
分词器将整个字符串分为单个词元,该词元仅支持整个字符串的精确匹配,然后使用 lowercase
词元筛选器将词元转换为小写。对于结果中的文档,Atlas Search 使用自定义分析器创建以下词元:
文档 ID | 输出词元 |
|
|
应用自定义分析器后,Atlas Search 会创建更多采用 n 元语法的词元,因为 Atlas Search 会对 title
字段构建索引定义中指定的 autocomplete 类型的索引。Atlas Search 使用采用 n 元语法的词元(其中包括 standup
的词元)来将文档与查询词 standup
进行匹配。
以下索引定义使用名为 lowerCaser
的自定义分析器对 minutes 集合中的 message
字段进行索引。自定义分析器指定以下内容:
应用标准分词器,以根据分词规则创建词元。
将以下筛选器应用于词元:
icuNormalizer 使用标准 Unicode 规范化模式对词元进行规范化。
lowercase
词元过滤器,用于将词元文本转换为小写。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
lowerCaser
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉菜单中选择 icuNormalizer,然后从 normalizationForm 下拉菜单中选择
nfkd
。单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉列表中选择 lowercase。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 以在message(消息)字段上应用自定义分析器。
从 Field Name 下拉列表中选择 message(消息),并从 Data Type 下拉列表中选择String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
lowerCaser
。单击 Add,然后单击 Save Changes。
{ "mappings": { "fields": { "message": { "type": "string", "analyzer": "lowerCaser" } } }, "analyzers": [ { "name": "lowerCaser", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "icuNormalizer", "normalizationForm": "nfkd" }, { "type": "lowercase" } ] } ] }
以下查询在message
字段中搜索sign-in
一词。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "sign-in", "path": "message" } } }, { "$project": { "_id": 1, "message": 1 } } ])
[ { _id: 1, message: 'try to siGn-In' }, { _id: 3, message: 'try to sign-in' }, { _id: 2, message: 'do not forget to SIGN-IN. See ① for details.' } ]
Atlas Search 在术语查询 sign-in
的结果中返回 _id: 1
、 _id: 3
和 _id:
2
的文档,这是因为 icuNormalizer
分词器首先通过分割文本(包括连字符单词)创建单独的词元,但保留了文档中的原始字母大小写,然后 lowercase
词元过滤器将标记转换为小写。Atlas Search 还使用 index analyzer (或者如果指定,则使用 searchAnalyzer
)来分析查询术语,以拆分查询术语并将其与文档匹配。
规范化形式 | 输出词元 |
|
|
|
|
|
|
nGram
nGram
词元过滤器将输入拆分为 n 个配置大小的词语。您无法在 synonym 或 autocomplete 映射定义中使用 nGram 词元过滤器。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
| 整型 | 是 | 指定生成的 n 个词语的最小长度的数字。值必须小于或等于 |
| 整型 | 是 | 指定生成的 n 个词语的最大长度的数字。值必须大于或等于 |
| 字符串 | no | 字符串,用于指定对短于
如果指定了 默认值: |
例子
以下索引定义使用名为 titleAutocomplete
的自定义分析器为分钟集合中的 title
字段编制索引。自定义分析器函数指定以下内容:
应用标准分词器以根据分词规则创建词元。
将一系列词元筛选器应用于词元:
englishPossessive
从词语中删除所有格(末尾的's
)。nGram
将词语拆分为 4 到 7 个字符长的词语。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
titleAutocomplete
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 englishPossessive,然后单击 Add token filter 以将词元过滤器添加到您的自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉菜单中选择 nGram 并为词元筛选器配置以下字段:
字段值minGram
4
maxGram
7
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 以对标题字段应用自定义分析器。
从 Field Name 下拉列表中选择 Title(标题),然后从 Data Type 下拉列表中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
titleAutocomplete
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "titleAutocomplete" } } }, "analyzers": [ { "name": "titleAutocomplete", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "englishPossessive" }, { "type": "nGram", "minGram": 4, "maxGram": 7 } ] } ] }
以下查询使用 wildcard 操作符在 minutes 集合的 title
字段中搜索词语 meet
,该词语后面具有任意数量的其他字符。
db.minutes.aggregate([ { "$search": { "index": "default", "wildcard": { "query": "meet*", "path": "title", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 3, title: 'The regular board meeting' } ]
Atlas Search 返回包含 _id: 1
和 _id: 3
的文档,因为这些文档包含词语 meeting
,Atlas Search 创建以下词元(可搜索词语)以将其与查询条件 meet*
进行匹配。
规范化形式 | 输出词元 |
---|---|
|
|
|
|
注意
Atlas Search 不会为少于 4 个字符的词语(例如 the
)和多于 7 个字符的词语创建词元,因为 termNotInBounds
参数默认设置为 omit
。如果您将 termNotInBounds
参数值设置为 include
,Atlas Search 也会为词语 the
创建词元。
porterStemming
porterStemming
词元筛选器使用 porter 词干提取算法,从英语词语中删除常见的形态后缀和屈折后缀。它要求使用小写文本,对于大写文本无效。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
例子
以下索引定义使用名为 porterStemmer
的自定义分析器对 minutes 集合中的 title
字段进行索引。自定义分析器指定以下内容:
应用标准分词器,以根据分词规则创建词元。
将以下词元筛选器应用于词元:
lowercase 词元过滤器,用于将词语转换为小写。
porterStemming 词元过滤器,用于从词语中删除常见的形态后缀和屈折后缀。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
porterStemmer
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 lowercase,然后单击 Add token filter 以将词元过滤器添加到您的自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉列表中选择 porterStemming。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 以对标题字段应用自定义分析器。
从 Field Name 下拉列表中选择 Title(标题),然后从 Data Type 下拉列表中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
porterStemmer
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "porterStemmer" } } }, "analyzers": [ { "name": "porterStemmer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "porterStemming" } ] } ] }
以下查询在 minutes 集合的 title
字段中搜索词语 Meet
。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "Meet", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 3, title: 'The regular board meeting' } ]
Atlas Search 返回包含_id: 1
和_id: 3
的文档,因为小写词元筛选器将词元文本规范为小写,然后porterStemming
词元筛选器从meeting
词元中提取形态后缀以创建meet
词元,该词元Atlas Search 与查询词Meet
匹配。 具体来说,Atlas Search 为结果中的文档创建以下词元(可搜索词语),然后将其与查询词语Meet
进行匹配:
规范化形式 | 输出词元 |
---|---|
|
|
|
|
正则表达式(Regex)
regex
词元筛选器将正则表达式应用于每个词元,以将匹配项替换为指定的字符串。
属性
它具有以下属性:
例子
以下索引定义使用名为 emailRedact
的自定义分析器对 minutes 集合中的 page_updated_by.email
字段进行索引。自定义分析器指定以下内容:
应用关键字分词器,以将字段值中的所有词语作为单个词语进行索引。
将以下词元筛选器应用于词元:
lowercase 词元过滤器,用于将词元中的大写字符转换为小写。
regex
词元筛选器,用于查找词元中看起来像电子邮件地址的字符串,并将其替换为词语redacted
。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
emailRedact
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 keyword。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 lowercase,然后单击 Add token filter 以将词元过滤器添加到您的自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉菜单中选择 regex 并为词元筛选器配置以下内容:
在 pattern 字段中输入
^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$
。在 replacement 字段中输入
redacted
。从 matches 下拉列表中选择
all
。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 page_updated_by.email 嵌套字段应用自定义分析器。
从 Field Name 下拉菜单中选择嵌套的 page_updated_by.email,并从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
emailRedact
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "analyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "page_updated_by": { "type": "document", "fields": { "email": { "type": "string", "analyzer": "emailRedact" } } } } }, "analyzers": [ { "charFilters": [], "name": "emailRedact", "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "lowercase" }, { "matches": "all", "pattern": "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$", "replacement": "redacted", "type": "regex" } ] } ] }
以下查询使用 wildcard 操作符在 minutes 集合的 page_updated_by.email
字段中搜索前面带有任意数量的其他字符的词语 example.com
。
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "index": "default", 5 "wildcard": { 6 "query": "*example.com", 7 "path": "page_updated_by.email", 8 "allowAnalyzedField": true 9 } 10 } 11 }, 12 { 13 "$project": { 14 "_id": 1, 15 "page_updated_by.email": 1 16 } 17 } 18 ])
尽管 page_updated_by.email
字段在电子邮件地址中包含字词 example.com
,但 Atlas Search 不会返回任何查询结果。Atlas Search 将与自定义分析器中提供的正则表达式匹配的字符串标记为词 redacted
,因此 Atlas Search 不会将查询词与任何文档相匹配。
reverse
reverse
词元筛选器颠倒每个字符串词元的顺序。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器的人类可读标签。值必须是 |
例子
以下索引定义使用名为 keywordReverse
的自定义分析器对 minutes 集合中的 page_updated_by.email
字段进行索引。该自定义分析器指定以下内容:
应用关键字分词器,以将整个字符串作为单个词语进行分词。
应用
reverse
词元筛选器以颠倒字符串词元的顺序。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
keywordReverse
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 keyword。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 reverse。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 page_updated_by.email 嵌套字段应用自定义分析器。
从 Field Name 下拉菜单中选择嵌套的 page_updated_by.email,并从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
keywordReverse
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "analyzer": "keywordReverse", "mappings": { "dynamic": true }, "analyzers": [ { "name": "keywordReverse", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "reverse" } ] } ] }
以下查询使用 wildcard 操作符搜索 minutes 集合中的 page_updated_by.email
字段,以按倒序匹配字符 @example.com
前面的任何字符。reverse
词元筛选器可以加快前导通配符查询的速度。
db.minutes.aggregate([ { "$search": { "index": "default", "wildcard": { "query": "*@example.com", "path": "page_updated_by.email", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "page_updated_by.email": 1, } } ])
对于前面的查询,Atlas Search 将自定义分析器应用于通配符查询以将查询转换如下:
moc.elpmaxe@*
然后,Atlas Search 针对索引的词元运行查询,这些词元也是倒序的。该查询返回以下文档:
[ { _id: 1, page_updated_by: { email: 'auerbach@example.com' } }, { _id: 2, page_updated_by: { email: 'ohrback@example.com' } }, { _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }, { _id: 4, page_updated_by: { email: 'levinski@example.com' } } ]
具体来说,Atlas Search 为结果中的文档创建以下词元(可搜索词语),然后将其与查询词语 moc.elpmaxe@*
进行匹配:
规范化形式 | 输出词元 |
---|---|
|
|
|
|
|
|
|
|
shingle
shingle
词元筛选器通过一系列词元构建 shingle(拆分为 n 个词语)。您无法在 synonym 或 autocomplete 映射定义中使用 shingle
词元筛选器。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
| 整型 | 是 | 每个 shingle 的最小词元数。必须大于或等于 |
| 整型 | 是 | 每个 shingle 的最大词元数。必须大于或等于 |
例子
minutes 集合中的 page_updated_by.email
字段的以下索引定义示例使用两个自定义分析器(emailAutocompleteIndex
和 emailAutocompleteSearch
)以实施类似于自动完成的功能。在索引创建期间,Atlas Search 使用 emailAutocompleteIndex
分析器执行以下操作:
将字段中的
@
字符替换为AT
使用空格分词器创建词元
Shingle 词元
创建这些shingle 词元的 edgeGram
在搜索期间,Atlas Search 使用 emailAutocompleteSearch
分析器执行以下操作:
将字段中的
@
字符替换为AT
使用空格分词器创建词元
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
emailAutocompleteIndex
。展开 Character Filters,然后单击 Add character filter。
从下拉菜单中选择 mapping,然后点击 Add mapping。
输入以下键和值:
键值@
AT
单击 Add character filter 可将字符筛选器添加到自定义分析器中。
如果 Tokenizer 已折叠,请将其展开。
从下拉菜单中选择 whitespace,并在 maxTokenLength 字段中输入
15
。展开 Token Filters,然后单击 Add token filter。
从下拉菜单中选择 shingle,然后配置以下字段。
字段字段值minShingleSize
2
minShingleSize
3
单击 Add token filter 可添加另一个词元筛选器。
单击 Add token filter 可添加另一个词元筛选器。
从下拉菜单中选择 edgeGram 并为词元筛选器配置以下字段:
字段字段值minGram
2
maxGram
15
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add,将自定义分析器添加到索引。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
emailAutocompleteSearch
。展开 Character Filters,然后单击 Add character filter。
从下拉菜单中选择 mapping,然后点击 Add mapping。
输入以下键和值:
键值@
AT
单击 Add character filter 可将字符筛选器添加到自定义分析器中。
如果 Tokenizer 已折叠,请将其展开。
从下拉菜单中选择 whitespace,并在 maxTokenLength 字段中输入
15
。单击 Add,将自定义分析器添加到索引。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 page_updated_by.email 嵌套字段应用自定义分析器。
从 Field Name 下拉菜单中选择嵌套的 page_updated_by.email,并从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 下拉菜单中选择
emailAutocompleteIndex
,并从 Search Analyzer 下拉菜单中选择emailAutocompleteSearch
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
1 { 2 "analyzer": "lucene.keyword", 3 "mappings": { 4 "dynamic": true, 5 "fields": { 6 "page_updated_by": { 7 "type": "document", 8 "fields": { 9 "email": { 10 "type": "string", 11 "analyzer": "emailAutocompleteIndex", 12 "searchAnalyzer": "emailAutocompleteSearch" 13 } 14 } 15 } 16 } 17 }, 18 "analyzers": [ 19 { 20 "name": "emailAutocompleteIndex", 21 "charFilters": [ 22 { 23 "mappings": { 24 "@": "AT" 25 }, 26 "type": "mapping" 27 } 28 ], 29 "tokenizer": { 30 "maxTokenLength": 15, 31 "type": "whitespace" 32 }, 33 "tokenFilters": [ 34 { 35 "maxShingleSize": 3, 36 **** "minShingleSize": 2, 37 "type": "shingle" 38 }, 39 { 40 "maxGram": 15, 41 "minGram": 2, 42 "type": "edgeGram" 43 } 44 ] 45 }, 46 { 47 "name": "emailAutocompleteSearch", 48 "charFilters": [ 49 { 50 "mappings": { 51 "@": "AT" 52 }, 53 "type": "mapping" 54 } 55 ], 56 "tokenizer": { 57 "maxTokenLength": 15, 58 "type": "whitespace" 59 } 60 } 61 ] 62 }
以下查询在 minutes 集合的 page_updated_by.email
字段中搜索电子邮件地址:
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "auerbach@ex", "path": "page_updated_by.email" } } }, { "$project": { "_id": 1, "page_updated_by.email": 1 } } ])
[ { _id: 1, page_updated_by: { email: 'auerbach@example.com' } } ]
Atlas Search 使用 emailAutocompleteSearch
分析器创建搜索词元,然后将其与使用 emailAutocompleteIndex
分析器创建的索引词元进行匹配。下表显示了 Atlas Search 创建的搜索词元和索引词元(最多 15 个字符):
搜索词元 | Index Tokens |
---|---|
|
|
snowballStemming
snowballStemming
词元使用 Snowball 生成的词干分析器筛选 Stems 词元。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
| 字符串 | 是 | 以下值是有效的:
|
例子
以下索引定义使用名为 frenchStemmer
的自定义分析器对 minutes 集合中的 text.fr_CA
字段进行索引。自定义分析器指定以下内容:
应用标准分词器,以根据分词规则创建词元。
将以下词元筛选器应用于词元:
lowercase 词元过滤器,用于将词元转换为小写。
french
用于提取词语的词干的snowballStemming
词元筛选器变体。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
frenchStemmer
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 lowercase,然后单击 Add token filter 以将词元过滤器添加到您的自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉菜单中选择 snowballStemming,然后从 stemmerName 下拉菜单中选择
french
。单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 text.fr_CA嵌套字段应用自定义分析器。
选择 text.fr_CA(嵌套在 Field Name 下拉菜单中),然后从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
frenchStemmer
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "mappings": { "fields": { "text": { "type": "document", "fields": { "fr_CA": { "type": "string", "analyzer": "frenchStemmer" } } } } }, "analyzers": [ { "name": "frenchStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "snowballStemming", "stemmerName": "french" } ] } ] }
以下查询在 minutes 集合的 text.fr_CA
字段中搜索词语 réunion
。
db.minutes.aggregate([ { "$search": { "text": { "query": "réunion", "path": "text.fr_CA" } } }, { "$project": { "_id": 1, "text.fr_CA": 1 } } ])
[ { _id: 1, text: { fr_CA: 'Cette page traite des réunions de département' } } ]
Atlas Search 在结果中返回包含 _id: 1
的文档。Atlas Search 将查询词语与文档进行匹配,因为它为文档创建以下词元,然后使用这些词元与查询词语 réunion
进行匹配:
文档 ID | 输出词元 |
---|---|
|
|
spanishPluralStemming
spanishPluralStemming
词元筛选器提取西班牙语复数词语的词干。它要求使用小写文本。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
例子
以下索引定义使用名为 spanishPluralStemmer
的自定义分析器对 minutes 集合中的 text.es_MX
字段进行索引。自定义分析器指定以下内容:
应用标准分词器,以根据分词规则创建词元。
将以下词元筛选器应用于词元:
lowercase 词元过滤器,用于将西班牙语词语转换为小写。
spanishPluralStemming
词元筛选器,用于为词元中的复数西班牙语词语提取单数形式的词干。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
spanishPluralStemmer
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 lowercase,然后单击 Add token filter 以将词元过滤器添加到您的自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉列表中选择 spanishPluralStemming。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 text.es_MX嵌套字段应用自定义分析器。
选择 text.es_MX(嵌套在 Field Name 下拉菜单中),然后从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
spanishPluralStemmer
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "analyzer": "spanishPluralStemmer", "mappings": { "fields": { "text: { "type": "document", "fields": { "es_MX": { "analyzer": "spanishPluralStemmer", "searchAnalyzer": "spanishPluralStemmer", "type": "string" } } } } }, "analyzers": [ { "name": "spanishPluralStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "spanishPluralStemming" } ] } ] }
以下查询在 minutes 集合的 text.es_MX
字段中搜索西班牙语词语 punto
。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "punto", "path": "text.es_MX" } } }, { "$project": { "_id": 1, "text.es_MX": 1 } } ])
[ { _id: 4, text : { es_MX: 'La página ha sido actualizada con los puntos de la agenda.', } } ]
Atlas Search 返回包含 _id: 4
的文档,因为文档中的 text.es_MX
字段包含复数词语 puntos
。Atlas Search 将该文档与查询词语 punto
进行匹配,因为 Atlas Search 从词语中去除复数 (s
),以将 puntos
作为 punto
进行分析。具体来说,Atlas Search 为结果中的文档创建以下词元(可搜索词语),然后使用这些词元匹配查询词语:
文档 ID | 输出词元 |
|
|
stempel
stempel
词元过滤器使用 Lucene 的 默认波兰语词干分析器表提取波兰语词语的词干。它要求使用小写文本。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
例子
以下索引定义使用名为 stempelStemmer
的自定义分析器对 minutes 集合中的 text.pl_PL
字段进行索引。自定义分析器指定以下内容:
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
stempelStemmer
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 standard。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 lowercase,然后单击 Add token filter 以将词元过滤器添加到您的自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉列表中选择 stempel。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 text.pl_PL嵌套字段应用自定义分析器。
选择 text.pl_PL(嵌套在 Field Name 下拉菜单中),然后从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
stempelStemmer
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "analyzer": "stempelStemmer", "mappings": { "dynamic": true, "fields": { "text.pl_PL": { "analyzer": "stempelStemmer", "searchAnalyzer": "stempelStemmer", "type": "string" } } }, "analyzers": [ { "name": "stempelStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "stempel" } ] } ] }
以下查询在 minutes 集合的 text.pl_PL
字段中搜索波兰语词语 punkt
。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "punkt", "path": "text.pl_PL" } } }, { "$project": { "_id": 1, "text.pl_PL": 1 } } ])
[ { _id: 4, text: { pl_PL: 'Strona została zaktualizowana o punkty porządku obrad.' } } ]
Atlas Search 返回包含 _id: 4
的文档,因为文档中的 text.pl_PL
字段包含复数词语 punkty
。Atlas Search 将该文档与查询词语 punkt
进行匹配,因为 Atlas Search 从词语中去除复数 (y
),以将 punkty
作为 punkt
进行分析。具体来说,Atlas Search 会为结果中的文档创建以下标记(可搜索词语),然后将其与查询词语进行匹配:
文档 ID | 输出词元 |
---|---|
|
|
stopword
stopword
词元筛选器删除与指定停用词对应的词元。该词元筛选器不分析指定的停用词。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
| 字符串数组 | 是 | 该列表包含与要删除的词元对应的停用词。值必须是一个或多个停用词。 |
| 布尔 | no | 该标记指示在筛选要删除的词元时是否忽略停用词大小写。值可以是以下值之一:
默认值: |
例子
以下索引定义使用名为 stopwordRemover
的自定义分析器对 minutes 集合中的 title
字段进行索引。自定义分析器指定以下内容:
应用空格分词器,以根据词语之间出现的空格创建词元。
应用
stopword
词元过滤器删除与定义的停用词is
、the
和at
匹配的标记。词元过滤器不区分大小写,并将删除与指定停用词匹配的所有词元。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
stopwordRemover
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 whitespace。
展开 Token Filters,然后单击 Add token filter。
从下拉菜单中选择 stopword,然后在 tokens 字段中输入以下内容:
is
,the
,at
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 text.en_US嵌套字段应用自定义分析器。
选择 text.en_US(嵌套在 Field Name 下拉菜单中),然后从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
stopwordRemover
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "mappings": { "fields": { "text": { "type" : "document", "fields": { "en_US": { "type": "string", "analyzer": "stopwordRemover" } } } } }, "analyzers": [ { "name": "stopwordRemover", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "stopword", "tokens": ["is", "the", "at"] } ] } ] }
以下查询在分钟集合的 text.en_US
字段中搜索短语 head of the sales
。
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "phrase": { 5 "query": "head of the sales", 6 "path": "text.en_US" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "text.en_US": 1 14 } 15 } 16 ])
1 [ 2 { 3 _id: 2, 4 text: { en_US: 'The head of the sales department spoke first.' } 5 } 6 ]
Atlas Search 返回包含 _id: 2
的文档,因为 en_US
字段包含查询词语。在分析期间,Atlas Search 不会为文档中的停用词 the
创建词元,但仍然能够将其与查询词语进行匹配,因为对于 string
字段,它还使用索引分析器或 searchAnalyzer
(如果指定)分析查询词语,并从查询词语中删除停用词,从而允许 Atlas Search 将查询词语与文档进行匹配。具体来说,Atlas Search 为结果中的文档创建以下词元:
文档 ID | 输出词元 |
---|---|
|
|
trim
trim
词元过滤器会删除词元中的前导和尾随空格。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
例子
以下索引定义使用名为 tokenTrimmer
的自定义分析器对 minutes 集合中的 text.en_US
进行索引。该自定义分析器指定以下内容:
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
tokenTrimmer
。展开 Character Filters,然后单击 Add character filter。
从下拉菜单中选择 htmlStrip,然后在 ignoredTags 字段中输入
a
。单击 Add character filter 可将字符筛选器添加到自定义分析器中。
如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 keyword。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 trim。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add,将自定义分析器添加到索引。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 text.en_US嵌套字段应用自定义分析器。
选择 text.en_US(嵌套在 Field Name 下拉菜单中),然后从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
tokenTrimmer
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "mappings": { "fields": { "text": { "type": "document", "fields": { "en_US": { "type": "string", "analyzer": "tokenTrimmer" } } } } }, "analyzers": [ { "name": "tokenTrimmer", "charFilters": [{ "type": "htmlStrip", "ignoredTags": ["a"] }], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "trim" } ] } ] }
以下查询在 minutes 集合的 text.en_US
字段中搜索前后具有任意数量的其他字符的短语 *department meetings*
。
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "wildcard": { 5 "query": "*department meetings*", 6 "path": "text.en_US", 7 "allowAnalyzedField": true 8 } 9 } 10 }, 11 { 12 "$project": { 13 "_id": 1, 14 "text.en_US": 1 15 } 16 } 17 ])
1 [ 2 { 3 _id: 1, 4 text: { en_US: '<head> This page deals with department meetings. </head>' } 5 } 6 ]
Atlas Search 返回包含 _id: 1
的文档,因为 en_US
字段包含查询词语 department meetings
。Atlas Search 为结果中的文档创建以下词元,这表明 Atlas Search 删除了 HTML 标记,为整个字符串创建了单个词元,并删除了词元中的前导和尾随空格:
文档 ID | 输出词元 |
---|---|
|
|
wordDelimiterGraph
wordDelimiterGraph
词元筛选器根据配置的规则将词元拆分为子词元。我们建议您不要将该词元筛选器与标准分词器一起使用,因为该分词器删除该词元筛选器用于确定边界的很多词语内分隔符。
属性
它具有以下属性:
名称 | 类型 | 必需? | 说明 |
---|---|---|---|
| 字符串 | 是 | 标识该词元筛选器类型的人类可读标签。值必须是 |
| 对象 | no | 该对象包含确定如何将词语拆分为子词语的规则。 默认值: |
delimiterOptions .generateWordParts | 布尔 | no | 该标记指示是否根据子词语拆分词元。例如,如果为 默认值: |
delimiterOptions .generateNumberParts | 布尔 | no | 该标记指示是否根据子编号拆分词元。例如,如果为 默认值: |
delimiterOptions .concatenateWords | 布尔 | no | 该标记指示是否连接子词语串。例如,如果为 默认值: |
delimiterOptions .concatenateNumbers | 布尔 | no | 该标记指示是否连接子数字串。例如,如果为 默认值: |
delimiterOptions .concatenateAll | 布尔 | no | 该标记指示是否连接所有内容。例如,如果为 默认值: |
delimiterOptions .preserveOriginal | 布尔 | no | 该标记指示是否生成原始词语的词元。 默认值: |
delimiterOptions .splitOnCaseChange | 布尔 | no | 该标记指示是否根据字母大小写转换拆分词元。例如,如果为 默认值: |
delimiterOptions .splitOnNumerics | 布尔 | no | 该标记指示是否根据字母-数字转换拆分词元。例如,如果为 默认值: |
delimiterOptions .stemEnglishPossessive | 布尔 | no | 该标记指示是否从每个子词语中删除尾随所有格。例如,如果为 默认值: |
delimiterOptions .ignoreKeywords | 布尔 | no | 指示是否跳过将 默认值: |
| 对象 | no | 该对象包含保护字选项。 默认值: |
protectedWords .words | 阵列 | 视条件而定 | 该列表包含要禁止分隔的词元。如果您指定 |
protectedWords .ignoreCase | 布尔 | no | 该标记指示是否忽略保护字区分大小写。 默认值: |
如果为 true
,则在该选项后面应用 flattenGraph 词元过滤器,以使词元流适合进行索引。
例子
以下索引定义使用名为 wordDelimiterGraphAnalyzer
的自定义分析器对 minutes 集合中的 title
字段进行索引。自定义分析器指定以下内容:
应用空格分词器,以根据词语之间出现的空格创建词元。
为以下内容应用 wordDelimiterGraph 词元过滤器:
不要尝试拆分
is
、the
和at
。排除区分大小写。例如,不会排除Is
和tHe
。在大小写发生变化时拆分词元,并删除仅包含英语字母表中的字母的词元。
在 Custom Analyzers 部分中,单击 Add Custom Analyzer。
选择 Create Your Own 单选按钮并单击 Next。
在 Analyzer Name 字段中输入
wordDelimiterGraphAnalyzer
。如果 Tokenizer 已折叠,请将其展开。
从下拉列表中选择 whitespace。
展开 Token Filters,然后单击 Add token filter。
从下拉列表中选择 lowercase,然后单击 Add token filter 以将词元过滤器添加到您的自定义分析器中。
单击 Add token filter 可添加另一个词元筛选器。
从下拉菜单中选择 wordDelimiterGraph,然后配置以下字段:
取消选择 delimiterOptions.generateWordParts 然后选择 delimiterOptions.splitOnCaseChange。
在
protectedWords.words
字段中键入并从下拉菜单中选择单词is
、the
和at
,一次一个。取消选择
protectedWords.ignoreCase
。
单击 Add token filter 可将词元筛选器添加到自定义分析器中。
单击 Add 可创建自定义分析器。
在 Field Mappings 部分中,单击 Add Field Mapping 可对 title(标题)嵌套字段应用自定义分析器。
从 Field Name 下拉菜单中选择嵌套的 title(标题),并从 Data Type 下拉菜单中选择 String(字符串)。
在数据类型的属性部分中,从 Index Analyzer 和 Search Analyzer 下拉菜单中选择
wordDelimiterGraphAnalyzer
。单击 Add,然后单击 Save Changes。
将默认索引定义替换为以下示例:
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "wordDelimiterGraphAnalyzer" } } }, "analyzers": [ { "name": "wordDelimiterGraphAnalyzer", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "wordDelimiterGraph", "protectedWords": { "words": ["is", "the", "at"], "ignoreCase": false }, "delimiterOptions" : { "generateWordParts" : false, "splitOnCaseChange" : true } } ] } ] }
以下查询在 minutes 集合的 title
字段中搜索词语 App2
。
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "App2", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 4, title: 'The daily huddle on tHe StandUpApp2' } ]
Atlas Search 返回包含 _id: 4
的文档,因为文档中的 title
字段包含 App2
。Atlas Search 在大小写发生变化时拆分词元,并删除由拆分创建的仅包含字母的词元。它还使用索引分析器或 searchAnalyzer
(如果指定)分析查询词语,以在大小写发生变化时拆分词语并删除 2
前面的字母。具体来说,对于 protectedWords
和 delimiterOptions
选项,Atlas Search 为包含 _id : 4
的文档创建以下词元:
wordDelimiterGraph 选项 | 输出词元 |
---|---|
|
|
|
|