关键字分析器
keyword
分析器接受字符串或字符串数组以作为参数,并将它们作为单个词语(词元)进行索引。仅返回与字段精确匹配的结果。它将所有文本保留为原始字母大小写。
当您 Refine Your Index 时,您可以在 Atlas UI Visual Editor 中看到 keyword
分析器为内置静态字符串创建的词元。如果扩展 View text
analysis of your selected index configuration,Index
Configurations 部分将显示 keyword
分析器创建的索引和搜索词元,以帮助您选择在索引中使用的分析器。
重要
Atlas Search不会对分析器词元大小超过32766字节的字符串字段进行索引。如果使用关键字分析器,则不会对超过32766字节的字符串字段编制索引。
例子
以下示例索引定义使用 keyword
分析器指定 sample_mflix.movies 集合中的 title
字段上的索引。如果您将集合加载到集群上,则可以使用 Atlas 用户界面可视化编辑器或 JSON 编辑器创建示例索引。在选择所需的配置方法后,选择数据库和集合。
单击 Refine Your Index 配置索引。
在 Field Mappings 部分中,单击 Add Field 打开 Add Field Mapping 窗口。
单击 Customized Configuration(连接)。
从 Field Name 下拉列表中选择
title
。单击 Data Type 下拉列表并选择 String(如果尚未选择)。
展开 String Properties 并进行以下更改:
索引分析器从下拉列表中选择lucene.keyword
。Search Analyzer从下拉列表中选择lucene.keyword
。索引选项使用默认offsets
。Store使用默认true
。忽略以上内容保留默认设置。规范使用默认include
。单击 Add(连接)。
单击 Save Changes(连接)。
单击 Create Search Index(连接)。
将默认索引定义替换为以下索引定义。
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "lucene.keyword" } } } } 单击 Next(连接)。
单击 Create Search Index(连接)。
以下查询在 title
字段中搜索短语 Class Action
。
db.movies.aggregate([ { "$search": { "text": { "query": "Class Action", "path": "title" } } }, { "$project": { "_id": 0, "title": 1 } } ])
[ { title: 'Class Action' } ]
Atlas Search 返回文档,因为它将查询词语 Class
Action
与使用 lucene.keyword
分析器为字段中的文本创建的单个词元 Class Action
进行匹配。相比之下,Atlas Search 不会为以下查询返回任何结果:
db.cases.aggregate([ { "$search": { "text": { "query": "action", "path": "title" } } } ])
集合中的很多文档都包含字符串 action
,但 keyword
分析器仅匹配搜索词语与字段的全部内容精确匹配的文档。对于前面的查询,keyword
分析器不会返回任何结果。不过,如果您使用标准分析器或简单分析器对该字段进行索引,Atlas Search 将在结果中返回多个文档,包括 title 字段值为 Class
Action
的文档,因为它创建类似于以下内容的词元,然后将其与查询词语进行匹配:
分析器 | 输出词元 | matches action | matches Class Action |
---|---|---|---|
关键字分析器词元 | Class Action | X | √ |
标准分析器词元 | class , action | √ | √ |
简单分析器词元 | class , action | √ | √ |