

Visit Relativity Learning to explore additional learning opportunities for this topic.
Preview the new short message search indexing experience in Relativity. This document provides information on searching message-level and event-level metadata in short messages. While similar to dtSearch, there are differences. For example, you can search specific fields by query in addition to keywords and phrases.
Currently, the only way to search or filter on events is to filter on the Relativity Short Message Format (RSMF) document, or use a dtSearch index. Both methods have limitations.
Description | Example | Search precision | |
---|---|---|---|
Elasticsearch | Searches on message-level and event-level metadata. |
If you enter a keyword, without writing a field-specific query, Relativity searches all message-level fields, including the message body. Searching for "John" returns results that match that term everywhere Relativity finds it. Such as in the sender_display and message_body fields. |
High |
dtSearch | Searches cannot search specific aspects. | If you searched "John Smith," the results would show that the phrase "John Smith" appears in the document, but not if he specifically sent a message, reacted, left the chat, and so forth. |
Medium |
Filter | Searches on document-level fields only. | If you want to find documents that have a message sent by John Smith, the closest you can get is by checking the Participants field. The Participants field tells you if John Smith was in the DM or channel at any point in time. | Low |
The Elasticsearch index enables you to create more complex searches on Relativity Short Message Format (RSMF) document than using dtSearch or filtering. It stores and searches on message-level and event-level metadata for enhanced accuracy. By using the metadata, you can search for RSMF messages sent by specific participants, within defined time frames, with specific reactions, as well as edited or deleted messages.
With the Elasticsearch index, you can enter an actual query instead of simple text to search for specific details. For example, suppose you want to search the sender_display field. In this case, you can search specifically on the sender_display field using Elastic Query Syntax (EQS) language.
Once key messages are located, you can apply message-level coding to make it easier to identify what's important in the conversation. This is especially useful during investigations with large amounts of short message data.
Note: Elasticsearch only supports RSMF messages processed in Relativity.
You can still search using regular text, but Relativity uses dtSearch for execution.
For more information on EQS and which fields are searchable, see Resources .
It's important to understand short message terminology and how it differs from other document terms. Below are common terms and their meaning when working with short message searches.
Term | Meaning |
---|---|
Document, RSMF document |
This term refers to all documents in the RSMF document type. An RSMF document may contain one or more messages. It has document-level metadata that provides aggregate data for items within a document. Example metadata includes participants, which is anyone involved in a document. Right now, searching on the document level metadata is the only way to filter RSMFs. |
Message, Event RSMF, Message Event |
Messages and events are individual actions within an RSMF document. These can include a sent message, a reaction, joining or leaving a chat, and so forth. |
Message-level metadata, Event-level metadata |
Message-level and event-level metadata is metadata for a specific message. For example, sent messages have sender_display metadata attached to them with the sender's screen name. Timestamp metadata tells you the exact date and time somebody sent the message. |
To get started searching on short message metadata, you must first install the Search AI app to your workspace.
Before you install the app, you must:
Once you complete those steps, you can install the application in your workspace.
The Search AI app is now in your workspace. You can begin building an index.
The short message search index workflow is similar to other search indexes. You must first build an index before being able to search it.
With Elasticsearch indexes, you can search using the search bar. You can enter a query you write yourself or use condition cards to select fields and filters to refine your search scope. While the Elasticsearch runs at the message and event levels, you will see the results at the document level.
Note: Documents returned may contain one or more hits at the message or event level.
To build the index, perform the following steps:
The Status field shows Completed when the build finishes successfully. The build process includes all RSMF documents in the workspace, so you do not have to select a saved search or specific indexed fields.
Below are the possible statuses when building a short message index:
After the build is complete, you can also run incremental builds. For more information, see Running incremental index builds.
After running a successful full build, you can run incremental builds. Incremental builds only run on new RSMF documents processed into the workspace and will add them to the index. As a result, incremental builds run faster than a full build.
Consider the following items when running an incremental build:
To start an incremental build:
The Index Manager Agent will start indexing the job as soon as it becomes available.
After successful completion, the newly indexed files are integrated with the existing search index. If the job is unsuccessful, you can check and retry errors by clicking the Retry Errors button located in the Errors and Status console. See Retry errors.
You can automatically trigger an incremental index build when new documents are added into a workspace using automated workflows.
To set up the Build Elasticsearch Index Automated Workflow:
After creating the automated workflow, the building of Elasticsearch indexes is now automated.
The dtSearch Index console includes an Errors and Status section with the following:
When retrying errors, the first step to take is to click the Retry Errors button to retry building the index with the errored documents. It is possible there were system issues. If there were, some documents will be fixed without reprocessing the documents.
If there are still errored documents, the next step would be to click the Show document errors link. If the list is manageable, you can go through each document to fix any document issues.
The final step would be to export the document information and either create a saved search to exclude the documents or to reprocess the documents.
When the following three custom coding fields are updated using message-level coding in the Viewer, it sends an event to the application and their data is automatically refreshed in the index.
Those events can be searched within a few minutes without having to build an index. For more information on coding fields, see Resources .
If an automatic update fails to index, the index will change to the status, Completed, Eventing active with errors. When eventing is active with errors, the respective documents will display in the Errored Documents modal when you click the Show Document Errors link. Click the Retry Errors button to start fixing the issue. Additionally, a banner will appear on the Documents list page if one or more message-level coding decisions were not indexed. Navigate to the index details page to retry the documents. For more information, see Retry errors.
After you build the index, you can now search it from the Documents tab in two ways:
To search using the search bar:
To search using condition cards:
After the query runs, the document list displays all the documents with at least one message or event matching the query.
You can also see the search results in the Short Message Viewer. Search results are highlighted in the Viewer. A yellow highlight appears around the metadata icon to indicate there is a message with a highlight.
Navigate to each hit by using the Persistent Highlight navigation buttons () on the top toolbar of the Viewer.
There are several options for searching the short message search index. The first is to enter keywords that automatically search across all metadata fields (including message-level and event-level text), or search specific field names and keywords. This method is the same as dtSearch.
Another option is to search by query. The basic format for a query is: FIELD_NAME: Keyword, where FIELD_NAME is the name of a specific event-level metadata field, for example, timestamp. The tables below lists four of the more common fields names you might use. For a complete list of searchable fields, see All searchable fields.
The colon operator is similar to IS LIKE in that the query looks for any instances where the keyword appears in that field for an event. Keywords should correspond to the field type. For example, by searching the sender_display field, you might enter "John Smith." For searching the timestamp field, you would enter a date-formatted keyword, such as 2024-02-09.
You can also combine searches across different fields using OR and AND operators similar to traditional query languages. To view a list of search syntax, see Elastic Query Syntax.
This section displays the four most common fields used for short message searching, along with tips for maximize your search results.
Field name | Real name | Type | Description | Example |
---|---|---|---|---|
Sender Display | sender_display | Text | Display name of the sender. Display names are not standardized so they can be different in different platforms for the same people. | Lilliana Huff - P1 |
Search tips:
|
Field name | Real name | Type | Description | Example |
---|---|---|---|---|
Timestamp | timestamp | Date | Returns the date and time the user sent the message. | 2021-01-05T09:15:45 |
Search tips:
|
Field name | Real name | Type | Description | Example |
---|---|---|---|---|
Message Body | message_body | Text | The actual text of the message. | I hear Sally has his ear. Tell Sally we'll take her to a nice dinner as a token of our appreciation in exchange for some business with Dr. Louis. |
Search tips:
|
Field name | Real name | Type | Description | Example |
---|---|---|---|---|
Event Type | event_type | Keyword | Multi-choice field. Options include message, disclaimer, join, or leave. | message |
Search tips:
If you are searching multiple event types, make sure to use parentheses between the different objects. For example, |
Use the following examples as a starting point for creating your query strings.
sender_display:(Abbie OR "Kyson Stanley") AND conversation_type:channel AND timestamp:[2012-10-13 TO 2023-12-12]
In English: Find messages sent by either Abbie or Kyson Stanley from October 13th 2012 and December 12th 2023, within a channel, not direct message.
sender_display: "Patience Mayo" AND message_body: "if you can cough" AND timestamp:[2012-10-13T09:15:00 TO 2023-10-13T15:15:00]
In English: Find all messages with 'Patience Mayo' in the display name, where the exact phrase "if you can cough" appears in the message body, and sent between 9:15 am on October 13th 2012 and 3:15pm on October 13th 2023.
is_edit:true OR deleted:true OR event_type:(join OR leave)
In English: Find all messages that were either edited or deleted, or a join or leave event.
message_body: (fraud OR "don't mention this" OR "take it offline") AND timestamp:<2023-10-01
In English: Find all messages containing the terms "fraud", "don't mention this", or "take it offline", sent before October 1, 2023.
Use the sections below to view a list of all searchable short message fields and a list of basic EQS operators and functions.
Field name | Real name | Type | Explanation | Example |
---|---|---|---|---|
IDs | ||||
Document ID | document_id | Keyword | Document ID of the RSMF File/Slice corresponding to certain messages | 2836477 |
Conversation ID | conversation_id | Keyword | MS Teams 1 | |
Event ID | event_id | Keyword | Individual message/event ID that correlates to one specific event (message, reaction, join, etc.). Unique only within the conversation. | Platform: Microsoft Teams Channel: Jackie Oshry, Documentation |
Conversations | ||||
Conversation Display | conversation_display | Text | This is an overview field that displays either the message platform, or the channel and users. | Platform: Microsoft Team Channel Name: Jackie Oshry, Documentation Team |
Conversation Type | conversation_type | Keyword | Multi-choice field. Can either be direct OR channel | channel |
Conversation Platform | conversation_platform | Keyword | MS Teams | |
Events | ||||
Event Type | event_type | Keyword | Multi-choice field. Can either be message OR disclaimer OR join OR leave | message |
Event Parent | event_parent | Keyword | ||
Event Importance | event_importance | Keyword | Multi-choice field. Can either be normal OR high | normal |
Message Body | message_body | Text | Actual text of the message | I hear sally has his ear. Tell Sally we'll take her to a nice dinner as a token of our appreciation in exchange for some business with Dr. Louis. |
Message Body Previous | message_body_previous | Text | If someone edited the message, then this field shows the previous iteration of that message. how do you differentiate between multiple edits? | |
Deleted | deleted | Boolean | States if someone deleted the message or not. True for deleted, False for not deleted. | false |
Is edited | is_edit | Boolean | States if a user edited the message or not. If no one edited the message, the Message Body Previous field will be null. | false |
Timestamp | timestamp | Date | States the date and time someone sent the message. | 2021-01-05T09:15:45 |
Sender | ||||
Sender ID | sender_id | Keyword | 4561346 | |
Sender Account ID | sender_account_id | Keyword | 234567 | |
Sender Display | sender_display | Text | Display name of the sender. Note that the display names are not standardized and can be different in different platforms for the same people. | John Smith |
Sender Email | sender_email | Text | john.smith@someemail.com | |
Attachments & Reactions | ||||
Attachment ID's | attachment_ids | Keyword | ||
Attachment Displays | attachment_displays | keyword | These will contain file name so can search for file extensions but not 100% reliable because native type and file extension can be different in some situations. | |
Attachment Count | attachment_count | Text | Can check if there are no attachment or greater less than certain fresh hold. | |
Attachment Max Size | attachment_max_size | Integer | This is another one of the use cases, search for messages with abnormally high attachment count. | |
Reaction Types | reaction_types | Keyword | [":see_no_evil:",":shushing_face:",":football:"] | |
Reaction Types Count | reaction_types_count | Integer | 3 | |
Reaction Total Count Across Types |
reaction_total_count _across_types |
Integer | 5 | |
Reaction Participants Display |
reaction_participants _display |
Text, Wildcard | ["Laura Jones","Michael Oliver"] | |
Coding | ||||
Responsive | custom_responsive | Boolean | This field reflects any message-level coding decisions made on the ‘responsive’ field using the coding layout. |
Checking for any messages with coding – _exists_: custom_responsive Checking for any messages without coding – NOT _exists_: custom_responsive Checking for any messages coded as responsive – custom_responsive: true Checking for any messages coded as not responsive – custom_responsive: false |
Privileged | custom_privileged | Boolean | This field reflects any message-level coding decisions made on the ‘privileged’ field using the coding layout. |
Checking for any messages with coding – _exists_: custom_privileged Checking for any messages without coding – NOT _exists_: custom_privileged Checking for any messages coded as responsive – custom_privileged: true Checking for any messages coded as not responsive – custom_privileged: false |
Notes | custom_notes | Text | This field reflects any message-level coding notes made in the ‘notes’ field using the coding layout. |
Searched the same as any other text field Custom_notes: “search for any phrase” |
Search function | Use | Query example |
---|---|---|
Basics |
In most cases, your search string consists the field name, followed by a colon, followed by the search criteria. Use quotes to search for an exact phrase. Omit field names to search all fields. Search results are not case sensitive. |
To search a specific field:
"Tom%Smith" matches Tom Smith in any field. |
Brackets | Use square brackets "[ ]" for inclusive date ranges. Use curly brackets "{ }" for exclusive date ranges. |
Inclusive
[2023-01-01 TO 2023-21-31] result in dates between 2023-01-01 and 2023-12-31, including the start and end dates. Exclusive {2023-01-01 TO 2023-12-31} matches dates between 2023-01-01 and 2023-12-31 excluding the start and end dates. |
Contains, IS LIKE | For CONTAINS, query the field, followed by a colon, followed by the query term. For IS LIKE, use the fuzzy operator. |
|
Date ranges |
Use TO when specifying date ranges. |
{* TO 2023-01-01} matches all dates occurring before 2023-01-01 { 2023-01-01 TO *} matches all dates occurring after 2023-01-01 [2023-01-01 TO 2023-12-31] matches all dates in 2023 |
Escape characters | Use the escape character (\) to force a literal interpretation of special characters and system characters. | Company\'s matches Company's |
Exact phrase |
You must use quotes to search for an exact phrase. | "Tom Smith" matches Tom Smith |
File size | Use to further narrow attachment results | attachment_max_size:>=20 returns documents with attachments that are greater than or equal to 20. The default unit of measurement is bytes. |
Fuzziness | Use the tilde ~ operator for fuzzy searches. | fokl~ matches both folk and folks |
Grouping sub-queries | Use parenthesis to group queries and sub-queries. | ("Tom" AND ("Smith" OR "Jones")) returns Tom Smith and Tom Jones |
Operators | Use AND, OR, NOT | "Bob" OR "Cat" returns documents containing the words Bob or Cat. |
Punctuation |
Elasticsearch treats most punctuation and symbols as word breaks. Use the escape character (\) to force a literal interpretation of special characters. |
Company's matches Company s Tom_Smith matches Tom Smith Tom%Smith matches Tom Smith Company\'s matches Company's Company\'s matches Company's "\\:wave\\:" returns the wave emoji |
Proximity | ("Term 1 Term 2" ~N) where N is the distance between terms. | ("quick fox" ~5) matches quick brown fox |
Spaces | Use the percentage character to include a space. | "Tom%Smith" matches Tom Smith |
Wildcards | Use question mark (?) for a single character. User asterisk (*) for multiple characters. Elasticsearch ignores wildcards placed inside of quotes. Cannot use wildcards to search for an entire phrase. |
"Sales agreement"* matches Sales agreement, Sales agreements "Sales agreement*" matches Sales agreement |
Emojis | Use the emoji or use quotation marks around the text version of an emoji. | ❤ or ":heart:" |
Why was this not helpful?
Check one that applies.
Thank you for your feedback.
Want to tell us more?
Great!