MM-63298: [AI assisted] Elasticsearch add a global search prefix (#30417)

This PR adds functionality to search by a global search prefix.
This allows Mattermost to be used across multiple data centers
with multiple Elasticsearch instances synchronized using
cross-cluster replication.

While here, we also add tests cases to cover for some missing
search interface methods.

For now, no system console setting is exposed. Because IndexPrefix
is also not exposed. It can be added later if a need arises.

https://mattermost.atlassian.net/browse/MM-63298

```release-note
A new config setting ElasticsearchSettings.GlobalSearchPrefix is added
which can be used to search across multiple indices having a common prefix.
This is useful in a scenario with multiple Elasticsearch instances, where
multiple instances are writing to different indices with different prefixes
using the ElasticsearchSettings.IndexPrefix setting.
```

Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
Agniva De Sarker
2025-04-04 11:42:12 +05:30
коммит произвёл GitHub
родитель 7250095f86
Коммит 09488558a0
7 изменённых файлов: 488 добавлений и 23 удалений

Просмотреть файл

@@ -8952,6 +8952,10 @@
"id": "model.config.is_valid.elastic_search.connection_url.app_error",
"translation": "Search ConnectionUrl setting must be provided when indexing is enabled."
},
{
"id": "model.config.is_valid.elastic_search.empty_index_prefix.app_error",
"translation": "IndexPrefix cannot be empty if GlobalSearchPrefix is set."
},
{
"id": "model.config.is_valid.elastic_search.enable_autocomplete.app_error",
"translation": "{{.EnableIndexing}} setting must be set to true when {{.Autocomplete}} is set to true"
@@ -8964,6 +8968,10 @@
"id": "model.config.is_valid.elastic_search.ignored_indexes_dash_prefix.app_error",
"translation": "Ignored indexes for purge should not start with dash."
},
{
"id": "model.config.is_valid.elastic_search.incorrect_search_prefix.app_error",
"translation": "GlobalSearchPrefix {{.GlobalSearchPrefix}} should be a prefix of IndexPrefix {{.IndexPrefix}}."
},
{
"id": "model.config.is_valid.elastic_search.invalid_backend.app_error",
"translation": "Invalid search backend. Must be either elasticsearch or opensearch."