Keyword Analyzer
The keyword
analyzer accepts a string or array of strings as a
parameter and indexes them as a single term (token). Only exact matches
on the field are returned. It leaves all text in its original letter case.
Tip
You can see the tokens that the keyword
analyzer creates for a
built-in sample document and query string when you create or edit an index in the Atlas UI Visual Editor.
If you select Refine Your Index, the Atlas UI displays
a section titled View text analysis of your selected index configuration
within the Index Configurations section. If you expand this section,
the Atlas UI displays the index and search tokens that the keyword
analyzer generates for each sample string.
Important
Atlas Search won't index string fields where analyzer tokens exceed 32766 bytes in size. If using the keyword analyzer, string fields which exceed 32766 bytes will not be indexed.
Example
The following example index definition specifies an index on
the title
field in the sample_mflix.movies
collection using the keyword
analyzer.
To follow along with this example, load the sample data on your cluster
and navigate to the Create a Search Index page in the Atlas UI following the steps
in the Create an Atlas Search Index tutorial.
Then, select the minutes
collection as your data source, and follow the example procedure
to create an index in the Visual Editor or JSON editor.
Click Refine Your Index to configure your index.
In the Index Configurations section, toggle Dynamic Mapping to off.
In the Field Mappings section, click Add Field to open the Add Field Mapping window.
Click Customized Configuration.
Select
title
from the Field Name dropdown.Click the Data Type dropdown and select String if it isn't already selected.
Expand String Properties and make the following changes:
Index Analyzer
Select
lucene.keyword
from the dropdown.Search Analyzer
Select
lucene.keyword
from the dropdown.Index Options
Use the default
offsets
.Store
Use the default
true
.Ignore Above
Keep the default setting.
Norms
Use the default
include
.Click Add.
Click Save Changes.
Click Create Search Index.
Replace the default index definition with the following index definition.
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "lucene.keyword" } } } } Click Next.
Click Create Search Index.
The following query searches for the phrase Class Action
in the
title
field.
db.movies.aggregate([ { "$search": { "text": { "query": "Class Action", "path": "title" } } }, { "$project": { "_id": 0, "title": 1 } } ])
[ { title: 'Class Action' } ]
Atlas Search returned the document because it matched the query term Class
Action
to the single token Class Action
that it creates for the
text in the field using the lucene.keyword
analyzer. By contrast,
Atlas Search doesn't return any results for the following query:
db.cases.aggregate([ { "$search": { "text": { "query": "action", "path": "title" } } } ])
Many documents in the collection contain the string action
, but the
keyword
analyzer only matches documents in which the search term
matches the entire contents of the field exactly. For the preceding
query, the keyword
analyzer wouldn't return any results. However, if
you indexed the field using the Standard Analyzer or
Simple Analyzer, Atlas Search would return multiple documents in the
results, including the document with the title field value Class
Action
, because it would create tokens similar to the following, which
it would then match to the query term:
Analyzer | Output Tokens | Matches action | Matches Class Action |
---|---|---|---|
Keyword Analyzer Tokens |
| X | √ |
Standard Analyzer Tokens |
| √ | √ |
Simple Analyzer Tokens |
| √ | √ |