fix #2710 replace with opensearch

This commit is contained in:
Shinsuke Sugaya 2023-01-13 22:27:55 +09:00
parent 16f5b072df
commit f2066b6ff0
17 changed files with 162 additions and 100 deletions

View file

@ -502,8 +502,8 @@
</paths>
<mapper>
<type>perm</type>
<user>elasticsearch</user>
<group>elasticsearch</group>
<user>opensearch</user>
<group>opensearch</group>
</mapper>
</data>
<!-- Add elasicsearch modules directory -->
@ -757,8 +757,8 @@
<mapping>
<directory>${packaging.fess.dictionary.dir}</directory>
<filemode>755</filemode>
<username>elasticsearch</username>
<groupname>elasticsearch</groupname>
<username>opensearch</username>
<groupname>opensearch</groupname>
</mapping>
<!-- es/modules -->
<mapping>

View file

@ -20,9 +20,9 @@ if [ "x$FESS_HEAP_SIZE" != "x" ]; then
FESS_MAX_MEM=$FESS_HEAP_SIZE
fi
# External elasticsearch cluster
# External opensearch cluster
#ES_HTTP_URL=http://localhost:9200
#FESS_DICTIONARY_PATH=/var/lib/elasticsearch/config/
#FESS_DICTIONARY_PATH=/var/lib/opensearch/config/
# SSL truststore for certificate validation over https
#FESS_JAVA_OPTS="$FESS_JAVA_OPTS -Djavax.net.ssl.trustStore=/tech/elastic/config/truststore.jks"

View file

@ -34,14 +34,14 @@ public class CrawlerEngineClient extends FesenClient {
final String[] hosts =
split(address, ",").get(stream -> stream.map(String::trim).filter(StringUtil::isNotEmpty).toArray(n -> new String[n]));
final Builder builder = Settings.builder().putList("http.hosts", hosts).put("processors", fessConfig.getCrawlerHttpProcessors())
.put("http.heartbeat_interval", fessConfig.getElasticsearchHeartbeatIntervalAsInteger().longValue());
final String username = fessConfig.getElasticsearchUsername();
final String password = fessConfig.getElasticsearchPassword();
.put("http.heartbeat_interval", fessConfig.getFesenHeartbeatInterval());
final String username = fessConfig.getFesenUsername();
final String password = fessConfig.getFesenPassword();
if (StringUtil.isNotBlank(username) && StringUtil.isNotBlank(password)) {
builder.put(Constants.FESEN_USERNAME, username);
builder.put(Constants.FESEN_PASSWORD, password);
}
final String authorities = fessConfig.getElasticsearchHttpSslCertificateAuthorities();
final String authorities = fessConfig.getFesenHttpSslCertificateAuthorities();
if (StringUtil.isNotBlank(authorities)) {
builder.put("http.ssl.certificate_authorities", authorities);
}

View file

@ -365,14 +365,14 @@ public class SearchEngineClient implements Client {
final String[] hosts =
split(host, ",").get(stream -> stream.map(String::trim).filter(StringUtil::isNotEmpty).toArray(n -> new String[n]));
final Builder builder = Settings.builder().putList("http.hosts", hosts).put("processors", fessConfig.availableProcessors())
.put("http.heartbeat_interval", fessConfig.getElasticsearchHeartbeatIntervalAsInteger().longValue());
final String username = fessConfig.getElasticsearchUsername();
final String password = fessConfig.getElasticsearchPassword();
.put("http.heartbeat_interval", fessConfig.getFesenHeartbeatInterval());
final String username = fessConfig.getFesenUsername();
final String password = fessConfig.getFesenPassword();
if (StringUtil.isNotBlank(username) && StringUtil.isNotBlank(password)) {
builder.put(Constants.FESEN_USERNAME, username);
builder.put(Constants.FESEN_PASSWORD, password);
}
final String authorities = fessConfig.getElasticsearchHttpSslCertificateAuthorities();
final String authorities = fessConfig.getFesenHttpSslCertificateAuthorities();
if (StringUtil.isNotBlank(authorities)) {
builder.put("http.ssl.certificate_authorities", authorities);
}

View file

@ -50,7 +50,7 @@ public class CurlHelper {
@PostConstruct
public void init() {
final FessConfig fessConfig = ComponentUtil.getFessConfig();
final String authorities = fessConfig.getElasticsearchHttpSslCertificateAuthorities();
final String authorities = fessConfig.getFesenHttpSslCertificateAuthorities();
if (StringUtil.isNotBlank(authorities)) {
if (logger.isDebugEnabled()) {
logger.debug("Loading certificate_authorities: {}", authorities);
@ -76,7 +76,7 @@ public class CurlHelper {
final String[] hosts = split(ResourceUtil.getFesenHttpUrl(), ",")
.get(stream -> stream.map(String::trim).filter(StringUtil::isNotEmpty).toArray(n -> new String[n]));
nodeManager = new NodeManager(hosts, node -> request(new CurlRequest(Method.GET, node.getUrl("/"))));
nodeManager.setHeartbeatInterval(fessConfig.getElasticsearchHeartbeatIntervalAsInteger().longValue());
nodeManager.setHeartbeatInterval(fessConfig.getFesenHeartbeatInterval());
}
public CurlRequest get(final String path) {
@ -101,8 +101,8 @@ public class CurlHelper {
protected CurlRequest request(final CurlRequest request) {
final FessConfig fessConfig = ComponentUtil.getFessConfig();
final String username = fessConfig.getElasticsearchUsername();
final String password = fessConfig.getElasticsearchPassword();
final String username = fessConfig.getFesenUsername();
final String password = fessConfig.getFesenPassword();
if (StringUtil.isNotBlank(username) && StringUtil.isNotBlank(password)) {
final String value = username + ":" + password;
final String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(value.getBytes(StandardCharsets.UTF_8));

View file

@ -102,7 +102,7 @@ public class SuggestHelper {
.actionGet(fessConfig.getIndexHealthTimeout());
final SuggestSettingsBuilder settingsBuilder = SuggestSettings.builder();
settingsBuilder.addInitialSettings("elasticsearch.type", fessConfig.getFesenType());
settingsBuilder.addInitialSettings("search_engine.type", fessConfig.getFesenType());
settingsBuilder.bulkTimeout(fessConfig.getIndexBulkTimeout());
settingsBuilder.clusterTimeout(fessConfig.getIndexHealthTimeout());
settingsBuilder.indexTimeout(fessConfig.getIndexIndexTimeout());

View file

@ -2865,7 +2865,7 @@ public class FessLabels extends UserMessages {
/** The key of the message: Version From */
public static final String LABELS_target_version = "{labels.target_version}";
/** The key of the message: Request to elasticsearch */
/** The key of the message: Request to OpenSearch */
public static final String LABELS_esreq_configuration = "{labels.esreq_configuration}";
/** The key of the message: Request File */
@ -2883,7 +2883,7 @@ public class FessLabels extends UserMessages {
/** The key of the message: Score: */
public static final String LABELS_doc_score = "{labels.doc_score}";
/** The key of the message: Running as Development mode. For production use, please install a standalone elasticsearch server. */
/** The key of the message: Running as Development mode. For production use, please install a standalone OpenSearch server. */
public static final String LABELS_development_mode_warning = "{labels.development_mode_warning}";
/** The key of the message: Your system is out of support. See EOL page. */

View file

@ -26,22 +26,22 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
String DOMAIN_TITLE = "domain.title";
/** The key of the configuration. e.g. default */
String ELASTICSEARCH_TYPE = "elasticsearch.type";
String search_engine_TYPE = "search_engine.type";
/** The key of the configuration. e.g. http://localhost:9201 */
String ELASTICSEARCH_HTTP_URL = "elasticsearch.http.url";
String search_engine_HTTP_URL = "search_engine.http.url";
/** The key of the configuration. e.g. */
String ELASTICSEARCH_HTTP_SSL_certificate_authorities = "elasticsearch.http.ssl.certificate_authorities";
String search_engine_HTTP_SSL_certificate_authorities = "search_engine.http.ssl.certificate_authorities";
/** The key of the configuration. e.g. */
String ELASTICSEARCH_USERNAME = "elasticsearch.username";
String search_engine_USERNAME = "search_engine.username";
/** The key of the configuration. e.g. */
String ELASTICSEARCH_PASSWORD = "elasticsearch.password";
String search_engine_PASSWORD = "search_engine.password";
/** The key of the configuration. e.g. 10000 */
String ELASTICSEARCH_heartbeat_interval = "elasticsearch.heartbeat_interval";
String search_engine_heartbeat_interval = "search_engine.heartbeat_interval";
/** The key of the configuration. e.g. aes */
String APP_CIPHER_ALGORISM = "app.cipher.algorism";
@ -1822,79 +1822,79 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
String getDomainTitle();
/**
* Get the value for the key 'elasticsearch.type'. <br>
* Get the value for the key 'search_engine.type'. <br>
* The value is, e.g. default <br>
* comment: Elasticsearch
* comment: Search Engine
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getElasticsearchType();
String getSearchEngineType();
/**
* Get the value for the key 'elasticsearch.http.url'. <br>
* Get the value for the key 'search_engine.http.url'. <br>
* The value is, e.g. http://localhost:9201 <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getElasticsearchHttpUrl();
String getSearchEngineHttpUrl();
/**
* Get the value for the key 'elasticsearch.http.ssl.certificate_authorities'. <br>
* Get the value for the key 'search_engine.http.ssl.certificate_authorities'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getElasticsearchHttpSslCertificateAuthorities();
String getSearchEngineHttpSslCertificateAuthorities();
/**
* Get the value for the key 'elasticsearch.http.ssl.certificate_authorities' as {@link Integer}. <br>
* Get the value for the key 'search_engine.http.ssl.certificate_authorities' as {@link Integer}. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
* @throws NumberFormatException When the property is not integer.
*/
Integer getElasticsearchHttpSslCertificateAuthoritiesAsInteger();
Integer getSearchEngineHttpSslCertificateAuthoritiesAsInteger();
/**
* Get the value for the key 'elasticsearch.username'. <br>
* Get the value for the key 'search_engine.username'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getElasticsearchUsername();
String getSearchEngineUsername();
/**
* Get the value for the key 'elasticsearch.username' as {@link Integer}. <br>
* Get the value for the key 'search_engine.username' as {@link Integer}. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
* @throws NumberFormatException When the property is not integer.
*/
Integer getElasticsearchUsernameAsInteger();
Integer getSearchEngineUsernameAsInteger();
/**
* Get the value for the key 'elasticsearch.password'. <br>
* Get the value for the key 'search_engine.password'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getElasticsearchPassword();
String getSearchEnginePassword();
/**
* Get the value for the key 'elasticsearch.password' as {@link Integer}. <br>
* Get the value for the key 'search_engine.password' as {@link Integer}. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
* @throws NumberFormatException When the property is not integer.
*/
Integer getElasticsearchPasswordAsInteger();
Integer getSearchEnginePasswordAsInteger();
/**
* Get the value for the key 'elasticsearch.heartbeat_interval'. <br>
* Get the value for the key 'search_engine.heartbeat_interval'. <br>
* The value is, e.g. 10000 <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getElasticsearchHeartbeatInterval();
String getSearchEngineHeartbeatInterval();
/**
* Get the value for the key 'elasticsearch.heartbeat_interval' as {@link Integer}. <br>
* Get the value for the key 'search_engine.heartbeat_interval' as {@link Integer}. <br>
* The value is, e.g. 10000 <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
* @throws NumberFormatException When the property is not integer.
*/
Integer getElasticsearchHeartbeatIntervalAsInteger();
Integer getSearchEngineHeartbeatIntervalAsInteger();
/**
* Get the value for the key 'app.cipher.algorism'. <br>
@ -7613,44 +7613,44 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
return get(FessConfig.DOMAIN_TITLE);
}
public String getElasticsearchType() {
return get(FessConfig.ELASTICSEARCH_TYPE);
public String getSearchEngineType() {
return get(FessConfig.search_engine_TYPE);
}
public String getElasticsearchHttpUrl() {
return get(FessConfig.ELASTICSEARCH_HTTP_URL);
public String getSearchEngineHttpUrl() {
return get(FessConfig.search_engine_HTTP_URL);
}
public String getElasticsearchHttpSslCertificateAuthorities() {
return get(FessConfig.ELASTICSEARCH_HTTP_SSL_certificate_authorities);
public String getSearchEngineHttpSslCertificateAuthorities() {
return get(FessConfig.search_engine_HTTP_SSL_certificate_authorities);
}
public Integer getElasticsearchHttpSslCertificateAuthoritiesAsInteger() {
return getAsInteger(FessConfig.ELASTICSEARCH_HTTP_SSL_certificate_authorities);
public Integer getSearchEngineHttpSslCertificateAuthoritiesAsInteger() {
return getAsInteger(FessConfig.search_engine_HTTP_SSL_certificate_authorities);
}
public String getElasticsearchUsername() {
return get(FessConfig.ELASTICSEARCH_USERNAME);
public String getSearchEngineUsername() {
return get(FessConfig.search_engine_USERNAME);
}
public Integer getElasticsearchUsernameAsInteger() {
return getAsInteger(FessConfig.ELASTICSEARCH_USERNAME);
public Integer getSearchEngineUsernameAsInteger() {
return getAsInteger(FessConfig.search_engine_USERNAME);
}
public String getElasticsearchPassword() {
return get(FessConfig.ELASTICSEARCH_PASSWORD);
public String getSearchEnginePassword() {
return get(FessConfig.search_engine_PASSWORD);
}
public Integer getElasticsearchPasswordAsInteger() {
return getAsInteger(FessConfig.ELASTICSEARCH_PASSWORD);
public Integer getSearchEnginePasswordAsInteger() {
return getAsInteger(FessConfig.search_engine_PASSWORD);
}
public String getElasticsearchHeartbeatInterval() {
return get(FessConfig.ELASTICSEARCH_heartbeat_interval);
public String getSearchEngineHeartbeatInterval() {
return get(FessConfig.search_engine_heartbeat_interval);
}
public Integer getElasticsearchHeartbeatIntervalAsInteger() {
return getAsInteger(FessConfig.ELASTICSEARCH_heartbeat_interval);
public Integer getSearchEngineHeartbeatIntervalAsInteger() {
return getAsInteger(FessConfig.search_engine_heartbeat_interval);
}
public String getAppCipherAlgorism() {
@ -10657,12 +10657,12 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
protected java.util.Map<String, String> prepareGeneratedDefaultMap() {
java.util.Map<String, String> defaultMap = super.prepareGeneratedDefaultMap();
defaultMap.put(FessConfig.DOMAIN_TITLE, "Fess");
defaultMap.put(FessConfig.ELASTICSEARCH_TYPE, "default");
defaultMap.put(FessConfig.ELASTICSEARCH_HTTP_URL, "http://localhost:9201");
defaultMap.put(FessConfig.ELASTICSEARCH_HTTP_SSL_certificate_authorities, "");
defaultMap.put(FessConfig.ELASTICSEARCH_USERNAME, "");
defaultMap.put(FessConfig.ELASTICSEARCH_PASSWORD, "");
defaultMap.put(FessConfig.ELASTICSEARCH_heartbeat_interval, "10000");
defaultMap.put(FessConfig.search_engine_TYPE, "default");
defaultMap.put(FessConfig.search_engine_HTTP_URL, "http://localhost:9201");
defaultMap.put(FessConfig.search_engine_HTTP_SSL_certificate_authorities, "");
defaultMap.put(FessConfig.search_engine_USERNAME, "");
defaultMap.put(FessConfig.search_engine_PASSWORD, "");
defaultMap.put(FessConfig.search_engine_heartbeat_interval, "10000");
defaultMap.put(FessConfig.APP_CIPHER_ALGORISM, "aes");
defaultMap.put(FessConfig.APP_CIPHER_KEY, "___change__me___");
defaultMap.put(FessConfig.APP_DIGEST_ALGORISM, "sha256");

View file

@ -2100,12 +2100,6 @@ public interface FessProp {
.get(stream -> stream.map(String::trim).filter(StringUtil::isNotEmpty).anyMatch(s -> s.equals(password)));
}
String getElasticsearchType();
default String getFesenType() {
return getElasticsearchType();
}
String getSearchlogRequestHeaders();
default String[] getSearchlogRequestHeadersAsArray() {
@ -2124,4 +2118,72 @@ public interface FessProp {
}
return value;
}
String get(String propertyKey);
String getSearchEngineType();
default String getFesenType() {
final String value = getSearchEngineType();
if (value != null) {
return value;
}
return get("elasticsearch.type");
}
String getSearchEngineHttpUrl();
default String getFesenHttpUrl() {
final String value = getSearchEngineHttpUrl();
if (value != null) {
return value;
}
return get("elasticsearch.http.url");
}
String getSearchEngineHttpSslCertificateAuthorities();
default String getFesenHttpSslCertificateAuthorities() {
final String value = getSearchEngineHttpSslCertificateAuthorities();
if (value != null) {
return value;
}
return get("elasticsearch.http.ssl.certificate_authorities");
}
String getSearchEngineUsername();
default String getFesenUsername() {
final String value = getSearchEngineUsername();
if (value != null) {
return value;
}
return get("elasticsearch.username");
}
String getSearchEnginePassword();
default String getFesenPassword() {
final String value = getSearchEnginePassword();
if (value != null) {
return value;
}
return get("elasticsearch.password");
}
Integer getAsInteger(String propertyKey);
Integer getSearchEngineHeartbeatIntervalAsInteger();
default long getFesenHeartbeatInterval() {
Integer value = getSearchEngineHeartbeatIntervalAsInteger();
if (value != null) {
return value.longValue();
}
value = getAsInteger("elasticsearch.heartbeat_interval");
if (value != null) {
return value.longValue();
}
return 10000L;
}
}

View file

@ -48,7 +48,7 @@ public class ResourceUtil {
return url;
}
final FessConfig fessConfig = ComponentUtil.getFessConfig();
return fessConfig.getElasticsearchHttpUrl();
return fessConfig.getFesenHttpUrl();
}
public static String getAppType() {

View file

@ -8,13 +8,13 @@
# The title of domain the application for logging
domain.title = Fess
# Elasticsearch
elasticsearch.type=default
elasticsearch.http.url=http://localhost:9201
elasticsearch.http.ssl.certificate_authorities=
elasticsearch.username=
elasticsearch.password=
elasticsearch.heartbeat_interval=10000
# Search Engine
search_engine.type=default
search_engine.http.url=http://localhost:9201
search_engine.http.ssl.certificate_authorities=
search_engine.username=
search_engine.password=
search_engine.heartbeat_interval=10000
# Cryptographer
app.cipher.algorism=aes

View file

@ -946,13 +946,13 @@ labels.reset_dictionaries=Reset Dictionaries
labels.reindex_start_button=Start
labels.targetVersion=Version
labels.target_version=Version From
labels.esreq_configuration=Request to elasticsearch
labels.esreq_configuration=Request to OpenSearch
labels.esreq_request_file=Request File
labels.requestFile=Request File
labels.esreq_button_upload=Send
labels.facet_is_not_found=No match
labels.doc_score=Score:
labels.development_mode_warning=Running as Development mode. For production use, please install a standalone elasticsearch server.
labels.development_mode_warning=Running as Development mode. For production use, please install a standalone OpenSearch server.
labels.eol_error=Your system is out of support. See EOL page.
labels.tooltip_search_view=Search View
labels.tooltip_run_crawler=Run Crawler

View file

@ -878,13 +878,13 @@ labels.replace_aliases=Aliase aktualisieren
labels.reindex_start_button=Start
labels.targetVersion=Version
labels.target_version=Version ab
labels.esreq_configuration=Anfrage an elasticsearch
labels.esreq_configuration=Anfrage an OpenSearch
labels.esreq_request_file=Anfrage-Datei
labels.requestFile=Datei anfragen
labels.esreq_button_upload=Senden
labels.facet_is_not_found=Kein Treffer.
labels.doc_score=Bewertung:
labels.development_mode_warning=Läuft im Entwicklermodus. Bitte installieren Sie einen Standalone-Elasticsearch-Server für produktiven Einsatz.
labels.development_mode_warning=Läuft im Entwicklermodus. Bitte installieren Sie einen Standalone-OpenSearch-Server für produktiven Einsatz.
labels.logLevel=Protokoll-Level
labels.stopwordsFile=Stopwörter-Datei
labels.stemmerOverrideFile=Stemmer-Override-Datei

View file

@ -945,13 +945,13 @@ labels.reset_dictionaries=Reset Dictionaries
labels.reindex_start_button=Start
labels.targetVersion=Version
labels.target_version=Version From
labels.esreq_configuration=Request to elasticsearch
labels.esreq_configuration=Request to OpenSearch
labels.esreq_request_file=Request File
labels.requestFile=Request File
labels.esreq_button_upload=Send
labels.facet_is_not_found=No match
labels.doc_score=Score:
labels.development_mode_warning=Running as Development mode. For production use, please install a standalone elasticsearch server.
labels.development_mode_warning=Running as Development mode. For production use, please install a standalone OpenSearch server.
labels.eol_error=Your system is out of support. See EOL page.
labels.tooltip_search_view=Search View
labels.tooltip_run_crawler=Run Crawler

View file

@ -946,13 +946,13 @@ labels.reset_dictionaries=辞書の初期化
labels.reindex_start_button=開始
labels.targetVersion=対象バージョン
labels.target_version=対象バージョン
labels.esreq_configuration=elasticsearchへのリクエスト
labels.esreq_configuration=OpenSearchへのリクエスト
labels.esreq_request_file=リクエストファイル
labels.requestFile=リクエストファイル
labels.esreq_button_upload=送信
labels.facet_is_not_found=該当なし
labels.doc_score=スコア:
labels.development_mode_warning=開発モードで起動しています。本運用環境ではElasticsearchを別途インストールしてください。
labels.development_mode_warning=開発モードで起動しています。本運用環境ではOpenSearchを別途インストールしてください。
labels.eol_error=ご利用のシステムはサポートが終了しています。製品サポート期限のページを参照して、アップグレードしてください。
labels.tooltip_search_view=検索画面
labels.tooltip_run_crawler=クローラーの実行

View file

@ -854,7 +854,7 @@ labels.upgrade_data_migration = 데이터 마이그레이션
labels.upgrade_start_button = 시작
labels.targetVersion = 대상 버전
labels.target_version = 대상 버전
labels.esreq_configuration = elasticsearch에 요청
labels.esreq_configuration = OpenSearch에 요청
labels.esreq_request_file = 요청 파일
labels.requestFile = 요청 파일
labels.esreq_button_upload = 전송
@ -951,7 +951,7 @@ labels.replace_aliases=Update Aliases
labels.reset_dictionaries=Reset Dictionaries
labels.reindex_start_button=Start
labels.doc_score=Score:
labels.development_mode_warning=Running as Development mode. For production use, please install a standalone elasticsearch server.
labels.development_mode_warning=Running as Development mode. For production use, please install a standalone OpenSearch server.
labels.eol_error=Your system is out of support. See EOL page.
labels.tooltip_search_view=Search View
labels.tooltip_run_crawler=Run Crawler

View file

@ -832,7 +832,7 @@ labels.upgrade_data_migration=Перенос данных
labels.upgrade_start_button=Старт
labels.targetVersion=Version
labels.target_version=Version From
labels.esreq_configuration=Запрос к elasticsearch
labels.esreq_configuration=Запрос к OpenSearch
labels.esreq_request_file=Request File
labels.requestFile=Request File
labels.esreq_button_upload=Send
@ -955,7 +955,7 @@ labels.replace_aliases=Update Aliases
labels.reset_dictionaries=Reset Dictionaries
labels.reindex_start_button=Start
labels.doc_score=Score:
labels.development_mode_warning=Running as Development mode. For production use, please install a standalone elasticsearch server.
labels.development_mode_warning=Running as Development mode. For production use, please install a standalone OpenSearch server.
labels.eol_error=Your system is out of support. See EOL page.
labels.tooltip_search_view=Search View
labels.tooltip_run_crawler=Run Crawler