-
Notifications
You must be signed in to change notification settings - Fork 500
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add concurrent segment search documentation #4990
Conversation
Signed-off-by: Fanit Kolchina <kolchfa@amazon.com>
Signed-off-by: Fanit Kolchina <kolchfa@amazon.com>
Signed-off-by: Fanit Kolchina <kolchfa@amazon.com>
@sohami Could you review this PR for technical accuracy? |
_api-reference/index-apis/stats.md
Outdated
## Concurrent segment search | ||
|
||
Starting with OpenSearch 2.10, you can perform [concurrent segment search](search-plugins/concurrent-segment-search/), in which each shard-level request will search the segments in parallel during query phase. If you enable concurrent segment search, the Index Stats API response will contain several additional fields with statistics about slices (units of work executed by a thread). For more information about slices, see [Concurrent segment search]({{site.url}}{{site.baseurl}}/search-plugins/concurrent-segment-search#searching-segments-concurrently). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Small nit: These stats will show up if the feature flag is enabled for concurrent search, regardless of if the cluster/index settings for concurrent search are enabled.
{% include copy-curl.html %} | ||
|
||
## Concurrent segment search |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These stats will also show up in nodes-stats as well as _cat/nodes
, _cat/shards
, _cat/indices
but for the _cat
APIs users can find it in the help section of the API.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kolchfa-aws since all of these stats are gated by the concurrent search feature flag, I was thinking this information should be kept all within the concurrent-segment-search.md
page too? I don't think we need to add these to the API pages until the feature is GA and the feature flag is removed, but it would be good to have the table below somewhere.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, the two options are:
- keep the APIs with the concurrent segment page
- put the APIs in their respective pages.
It's a matter of opinion, but I think it makes it easier if the API changes are kept in the API pages. Users won't see concurrent-segment-related fields if they don't enable the feature, so I don't think there's any harm in keeping them in the API pages, especially because they are in a separate table. The danger with keeping them in the main page is that someone can just remove the experimental header and not add the API changes in the GA release.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The danger with keeping them in the main page is that someone can just remove the experimental header and not add the API changes in the GA release.
Maybe we can track this is an issue somewhere - perhaps #3662
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added a comment so we can track
_api-reference/profile.md
Outdated
|`time_in_nanos` |For concurrent segment search, `time_in_nanos` is the cumulative amount of time to execute all methods across all slices, in nanoseconds. This is not equivalent to the actual amount of time the query took to execute because it does not take into account that multiple slices can execute the methods in parallel. | | ||
|`breakdown.<method>` |For concurrent segment search, this field contains the total amount of time taken by all segments to execute a method. | | ||
|`<method>_count` |For concurrent segment search, this field contains the total number of invocations of a `<method>` obtained by adding the number of method invocations for all segments. | |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: breakdown.<method>_count
_api-reference/profile.md
Outdated
The following sections contain definitions of all modified or added response fields for concurrent segment search. | ||
|
||
#### The `query` object |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The query
array
#### Example response | ||
|
||
The following is an example response for a concurrent search with three segment slices: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we mention this response has profile enabled?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This file is the Profile API documentation and it states in the very beginning that you have to set profile
to true
in order to get these responses.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ticheng-aws are any of these response fields gated by the concurrent search feature flag? If so I think we should call those out.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The new fields are not gated by the concurrent search feature flag.
Signed-off-by: Fanit Kolchina <kolchfa@amazon.com>
Thanks, @jed326 and @ticheng-aws! I implemented your comments. |
Signed-off-by: Fanit Kolchina <kolchfa@amazon.com>
Signed-off-by: Fanit Kolchina <kolchfa@amazon.com>
{% include copy-curl.html %} | ||
|
||
## Concurrent segment search |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kolchfa-aws since all of these stats are gated by the concurrent search feature flag, I was thinking this information should be kept all within the concurrent-segment-search.md
page too? I don't think we need to add these to the API pages until the feature is GA and the feature flag is removed, but it would be good to have the table below somewhere.
#### Example response | ||
|
||
The following is an example response for a concurrent search with three segment slices: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ticheng-aws are any of these response fields gated by the concurrent search feature flag? If so I think we should call those out.
## Concurrent segment search mechanisms | ||
|
||
You can choose one of the two available concurrent segment mechanisms: the default [Lucene mechanism](#the-lucene-mechanism) or the [max slice count mechanism](#the-max-slice-count-mechanism). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These mechanisms are about controlling the amount of concurrency, so maybe the section should be titled "Mechanisms to control search concurrency" or something along those lines.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about Concurrent Segment Search Slice Calculation
?
You can choose one of the two available concurrent segment search slice calculation mechanisms:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about "Slicing mechanisms"?
|
||
### The Lucene mechanism | ||
|
||
By default, Lucene assigns a maximum of 250 K documents or 5 segments (whichever is met first) to each slice in a shard. For example, consider a shard with 11 segments. The first 5 segments have 250 K documents each and the next 6 segments have 20 K documents each. The first 5 segments will be assigned to one slice each because they each contain the maximum allowed document count for a slice. Then the next 5 segments will all be assigned to another slice because of the maximum allowed segment count for a slice. The 11th slice will be assigned to a separate slice. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Then the next 5 segments will all be assigned to another single slice"
_api-reference/cat/cat-indices.md
Outdated
|
||
## Concurrent segment search | ||
|
||
Starting with OpenSearch 2.10, you can perform [concurrent segment search]({{site.url}}{{site.baseurl}}/search-plugins/concurrent-segment-search/), in which each shard-level request will search the segments in parallel during query phase. If you [enable the concurrent segment search feature flag]({{site.url}}{{site.baseurl}}/search-plugins/concurrent-segment-search#enabling-the-feature-flag), the CAT Indices API response will contain several additional fields with statistics about slices (units of work executed by a thread). For the descriptions of those fields, see [Index Stats API]({{site.url}}{{site.baseurl}}/api-reference/index-apis/stats#concurrent-segment-search). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kolchfa-aws Lets not add these in the _cat/indices or /nodes and /shards
API doc section. We only add the default stats displayed by these API. Users don't generally use these APIs for other stats
|
||
## The `terminate_after` search parameter | ||
|
||
The [`terminate_after` search parameter]({{site.url}}{{site.baseurl}}/api-reference/search/#url-parameters) is used to terminate a search request once a specified number of docs has been collected. In the non-concurrent search workflow, this count is evaluated at each shard, however for the concurrent search workflow this will be evaluated at each leaf slice instead to avoid synchronizing document counts between threads. Functionally there should be no difference, however in the concurrent search case the request may perform slightly more work than expected because of each segment slice on the shard collecting up to the specified number of docs. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The terminate_after
search parameter is used to terminate a search request once a specified number of docs has been collected. In the non-concurrent search workflow, this count is evaluated at each shard, however for the concurrent search workflow this will be evaluated at each leaf slice instead to avoid synchronizing document counts between threads. In the concurrent search case, the request will perform more work than expected because of each segment slice on the shard collecting up to the specified number of docs. The intent to terminate collection after the threshold is reached is still kept at slice level. So you will see overall more hits count in result than terminate_after threshold but up to a max of slice_count * terminate_after
. The number of returned hits will be controlled by size
parameter.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reworded
|
||
## Searching segments concurrently | ||
|
||
Without concurrent segment search, Lucene executes a request sequentially across all segments on each shard during query phase. The query phase then collects the top hits for the search request. With concurrent segment search, each shard-level request will search the segments in parallel during query phase. For each shard, the segments are divided into multiple work units called _slices_. Each _slice_ is the unit of work which can be executed in parallel on a separate thread, thus the slice count determines the maximum degree of parallelism for a shard-level request. Once all the slices complete their work, Lucene performs a reduce operation on the slices, merging them and creating the final result for this shard-level request. Slices are executed using a new `index_searcher` thread pool, which is different from the `search` thread pool that handles shard-level requests. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Each _slice_ is the unit of work which can be executed in parallel on a separate thread
---> Each _slice_ can be executed in parallel on a separate thread
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reworded
## Concurrent segment search mechanisms | ||
|
||
You can choose one of the two available concurrent segment mechanisms: the default [Lucene mechanism](#the-lucene-mechanism) or the [max slice count mechanism](#the-max-slice-count-mechanism). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about Concurrent Segment Search Slice Calculation
?
You can choose one of the two available concurrent segment search slice calculation mechanisms:
- [CAT Indices]({{site.url}}{{site.baseurl}}/api-reference/cat/cat-indices/) | ||
- [CAT Nodes]({{site.url}}{{site.baseurl}}/api-reference/cat/cat-nodes/) | ||
- [CAT Shards]({{site.url}}{{site.baseurl}}/api-reference/cat/cat-shards/) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think we need to mention the _cat/indices
or _cat/nodes
or _cat/shards
API here. Usually users don't see any index or node level stats using these APIs. And we don't add any other stats related info in the doc of these APIs anyways.
}, | ||
"max_score": 1, | ||
"hits": [ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hits
array and aggregation
section we can remove with ...
as that is not relevant here. We can just keep the profile
portion
``` | ||
{% include copy.html %} | ||
|
||
## Disabling concurrent search for an index or all indexes |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Disabling concurrent search at index or cluster level
Use concurrent segment search to search the segments in parallel during query phase. Some cases in which concurrent segment search improves search latency include the following: | ||
|
||
- When sending long-running requests, for example, requests that contain aggregations or large ranges. | ||
- As an alternative to force-merging segments into a single segment in order to improve performance. | ||
- Running a search on an index with multiple segments in searchable snapshots. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we can remove the last point since second is generic enough and covers all types of indices.
- `0`: Use the default Lucene mechanism. | ||
- Positive integer: Use the max target slice count mechanism. Usually, a value 2--8 should be sufficient. | ||
|
||
## The `terminate_after` search parameter |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
May be lets call this section as "Things to Know". We may add more info in this section going forward.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can generalize later when we add more info. For now, I think it's better to leave this heading because it's more descriptive.
@@ -1072,6 +1072,10 @@ total_rejections_breakup_shadow_mode.throughput_degradation_limits | Integer | T | |||
enabled | Boolean | Specifies whether the shard indexing pressure feature is turned on for the node. | |||
enforced | Boolean | If true, the shard indexing pressure runs in enforced mode (there are rejections). If false, the shard indexing pressure runs in shadow mode (there are no rejections, but statistics are recorded and can be retrieved in the `total_rejections_breakup_shadow_mode` object). Only applicable if shard indexing pressure is enabled. | |||
|
|||
## Concurrent segment search | |||
|
|||
Starting with OpenSearch 2.10, you can perform [concurrent segment search]({{site.url}}{{site.baseurl}}/search-plugins/concurrent-segment-search/), in which each shard-level request will search the segments in parallel during query phase. If you [enable the concurrent segment search feature flag]({{site.url}}{{site.baseurl}}/search-plugins/concurrent-segment-search#enabling-the-feature-flag), the Nodes Stats API response will contain several additional fields with statistics about slices (units of work executed by a thread). For the descriptions of those fields, see [Index Stats API]({{site.url}}{{site.baseurl}}/api-reference/index-apis/stats#concurrent-segment-search). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can be add experimental
somewhere for the feature like If you enable the experimental feature concurrent segment search
Signed-off-by: Fanit Kolchina <kolchfa@amazon.com>
@jed326 @ticheng-aws @sohami I've implemented your comments. Could you please review again? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few comments. Looks good.
_api-reference/profile.md
Outdated
`profile.shards.searches.rewrite_time` | Integer | All Lucene queries are rewritten. A query and its children may be rewritten more than once, until the query stops changing. The rewriting process involves performing optimizations, such as removing redundant clauses or replacing a query path with a more efficient one. After the rewriting process, the original query may change significantly. The `rewrite_time` field contains the cumulative total rewrite time for the query and all its children, in nanoseconds. | ||
[`profile.shards.searches.collector`](#the-collector-array) | Array of objects | Profiling information about the Lucene collectors that ran the search. | ||
[`profile.shards.aggregations`](#aggregations) | Array of objects | Profiling information about the aggregation execution. | ||
|
||
### The `query` object | ||
### The `query` array | ||
|
||
The `query` object contains the following fields. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should "object" be changed to "array?"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, thanks!
As an alternative to directly modifying `config/jvm.options`, you can define the properties by using an environment variable. This can be done in a single command when you start OpenSearch or by defining the variable with `export`. | ||
|
||
To add these flags in-line when starting OpenSearch, run the following command: | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Delete extra line?
## Disabling concurrent search at index or cluster level | ||
|
||
After you enable the experimental feature flag, all search requests will use concurrent segment search during query phase. To disable concurrent segment search for all indexes, set following dynamic cluster setting: | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Delete extra line?
|
||
### The Lucene mechanism | ||
|
||
By default, Lucene assigns a maximum of 250 K documents or 5 segments (whichever is met first) to each slice in a shard. For example, consider a shard with 11 segments. The first 5 segments have 250 K documents each and the next 6 segments have 20 K documents each. The first 5 segments will be assigned to one slice each because they each contain the maximum allowed document count for a slice. Then the next 5 segments will all be assigned to another single slice because of the maximum allowed segment count for a slice. The 11th slice will be assigned to a separate slice. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does "250 K" mean 250,000? If so, then either write out the number 250,000 or close up the space between numeral and unit of measure (250K). Or are we referring to 250 k documents?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
250,000. I'll close the space.
Co-authored-by: Melissa Vagi <vagimeli@amazon.com> Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com>
Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com>
Co-authored-by: Melissa Vagi <vagimeli@amazon.com> Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com>
Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kolchfa-aws Please see my comments and changes and let me know if you have any questions. Thanks!
@@ -1072,6 +1072,10 @@ total_rejections_breakup_shadow_mode.throughput_degradation_limits | Integer | T | |||
enabled | Boolean | Specifies whether the shard indexing pressure feature is turned on for the node. | |||
enforced | Boolean | If true, the shard indexing pressure runs in enforced mode (there are rejections). If false, the shard indexing pressure runs in shadow mode (there are no rejections, but statistics are recorded and can be retrieved in the `total_rejections_breakup_shadow_mode` object). Only applicable if shard indexing pressure is enabled. | |||
|
|||
## Concurrent segment search | |||
|
|||
Starting with OpenSearch 2.10, you can perform [concurrent segment search]({{site.url}}{{site.baseurl}}/search-plugins/concurrent-segment-search/), in which each shard-level request will search the segments in parallel during query phase. If you [enable the experimental concurrent segment search feature flag]({{site.url}}{{site.baseurl}}/search-plugins/concurrent-segment-search#enabling-the-feature-flag), the Nodes Stats API response will contain several additional fields with statistics about slices (units of work executed by a thread). For the descriptions of those fields, see [Index Stats API]({{site.url}}{{site.baseurl}}/api-reference/index-apis/stats#concurrent-segment-search). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please apply edits from previous text to this para.
_api-reference/profile.md
Outdated
## Concurrent segment search | ||
|
||
Starting with OpenSearch 2.10, you can perform [concurrent segment search]({{site.url}}{{site.baseurl}}/search-plugins/concurrent-segment-search/), in which each shard-level request will search the segments in parallel during query phase. If you enable the experimental concurrent segment search feature flag, the Profile API response will contain several additional fields with statistics about _slices_. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Apply previous edits.
|
||
## API changes | ||
|
||
If you enable the concurrent segment search feature flag, the following stats API responses will contain several additional fields with statistics about slices: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should "Stats" be capitalized?
|
||
For the descriptions of the added fields, see [Index Stats API]({{site.url}}{{site.baseurl}}/api-reference/index-apis/stats#concurrent-segment-search). | ||
|
||
Additionally, for the [Profile API], some response fields will be modified and others added. For more information, see the [concurrent segment search section of the Profile API]({{site.url}}{{site.baseurl}}/api-reference/profile/). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"of the Profile API documentation"? Missing link.
Co-authored-by: Nathan Bower <nbower@amazon.com> Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com>
Signed-off-by: Fanit Kolchina <kolchfa@amazon.com>
* Add concurrent segment search documentation Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Add API information Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Small rewording Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Add tech review feedback Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Fix link Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Add API section Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Small rewriting Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Rewriting Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Tech review feedback Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Apply suggestions from code review Co-authored-by: Melissa Vagi <vagimeli@amazon.com> Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> * Update profile.md Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> * Update _api-reference/profile.md Co-authored-by: Melissa Vagi <vagimeli@amazon.com> Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> * Update concurrent-segment-search.md Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Nathan Bower <nbower@amazon.com> Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> * Implemented editorial comments Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> --------- Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> Co-authored-by: Melissa Vagi <vagimeli@amazon.com> Co-authored-by: Nathan Bower <nbower@amazon.com>
* Add concurrent segment search documentation Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Add API information Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Small rewording Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Add tech review feedback Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Fix link Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Add API section Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Small rewriting Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Rewriting Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Tech review feedback Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Apply suggestions from code review Co-authored-by: Melissa Vagi <vagimeli@amazon.com> Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> * Update profile.md Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> * Update _api-reference/profile.md Co-authored-by: Melissa Vagi <vagimeli@amazon.com> Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> * Update concurrent-segment-search.md Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Nathan Bower <nbower@amazon.com> Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> * Implemented editorial comments Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> --------- Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> Signed-off-by: kolchfa-aws <105444904+kolchfa-aws@users.noreply.github.com> Co-authored-by: Melissa Vagi <vagimeli@amazon.com> Co-authored-by: Nathan Bower <nbower@amazon.com>
Fixes #4989
Checklist
For more information on following Developer Certificate of Origin and signing off your commits, please check here.