mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-25 14:28:51 +08:00
feat(server): add cloud indexer with Elasticsearch and Manticoresearch providers (#11835)
close CLOUD-137 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced advanced workspace-scoped search and aggregation capabilities with support for complex queries, highlights, and pagination. - Added pluggable search providers: Elasticsearch and Manticoresearch. - New GraphQL queries, schema types, and resolver support for search and aggregation. - Enhanced configuration options for search providers in self-hosted and cloud deployments. - Added Docker Compose services and environment variables for Elasticsearch and Manticoresearch. - Integrated indexer service into deployment and CI workflows. - **Bug Fixes** - Improved error handling with new user-friendly error messages for search provider and indexer issues. - **Documentation** - Updated configuration examples and environment variable references for indexer and search providers. - **Tests** - Added extensive end-to-end and provider-specific tests covering indexing, searching, aggregation, deletion, and error cases. - Included snapshot tests and test fixtures for search providers. - **Chores** - Updated deployment scripts, Helm charts, and Kubernetes manifests to include indexer-related environment variables and secrets. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -260,6 +260,33 @@
|
||||
"desc": "Customer.io token"
|
||||
}
|
||||
},
|
||||
"indexer": {
|
||||
"enabled": {
|
||||
"type": "Boolean",
|
||||
"desc": "Enable indexer plugin"
|
||||
},
|
||||
"provider.type": {
|
||||
"type": "String",
|
||||
"desc": "Indexer search service provider name",
|
||||
"env": "AFFINE_INDEXER_SEARCH_PROVIDER"
|
||||
},
|
||||
"provider.endpoint": {
|
||||
"type": "String",
|
||||
"desc": "Indexer search service endpoint",
|
||||
"env": "AFFINE_INDEXER_SEARCH_ENDPOINT"
|
||||
},
|
||||
"provider.username": {
|
||||
"type": "String",
|
||||
"desc": "Indexer search service auth username, if not set, basic auth will be disabled. Optional for elasticsearch",
|
||||
"link": "https://www.elastic.co/guide/en/elasticsearch/reference/current/http-clients.html",
|
||||
"env": "AFFINE_INDEXER_SEARCH_USERNAME"
|
||||
},
|
||||
"provider.password": {
|
||||
"type": "String",
|
||||
"desc": "Indexer search service auth password, if not set, basic auth will be disabled. Optional for elasticsearch",
|
||||
"env": "AFFINE_INDEXER_SEARCH_PASSWORD"
|
||||
}
|
||||
},
|
||||
"oauth": {
|
||||
"providers.google": {
|
||||
"type": "Object",
|
||||
|
||||
@@ -8552,6 +8552,22 @@ export function useAFFiNEI18N(): {
|
||||
* `Invalid app config.`
|
||||
*/
|
||||
["error.INVALID_APP_CONFIG"](): string;
|
||||
/**
|
||||
* `Search provider not found.`
|
||||
*/
|
||||
["error.SEARCH_PROVIDER_NOT_FOUND"](): string;
|
||||
/**
|
||||
* `Invalid request argument to search provider: {{reason}}`
|
||||
*/
|
||||
["error.INVALID_SEARCH_PROVIDER_REQUEST"](options: {
|
||||
readonly reason: string;
|
||||
}): string;
|
||||
/**
|
||||
* `Invalid indexer input: {{reason}}`
|
||||
*/
|
||||
["error.INVALID_INDEXER_INPUT"](options: {
|
||||
readonly reason: string;
|
||||
}): string;
|
||||
} { const { t } = useTranslation(); return useMemo(() => createProxy((key) => t.bind(null, key)), [t]); }
|
||||
function createComponent(i18nKey: string) {
|
||||
return (props) => createElement(Trans, { i18nKey, shouldUnescape: true, ...props });
|
||||
|
||||
@@ -2110,5 +2110,8 @@
|
||||
"error.NOTIFICATION_NOT_FOUND": "Notification not found.",
|
||||
"error.MENTION_USER_DOC_ACCESS_DENIED": "Mentioned user can not access doc {{docId}}.",
|
||||
"error.MENTION_USER_ONESELF_DENIED": "You can not mention yourself.",
|
||||
"error.INVALID_APP_CONFIG": "Invalid app config."
|
||||
"error.INVALID_APP_CONFIG": "Invalid app config.",
|
||||
"error.SEARCH_PROVIDER_NOT_FOUND": "Search provider not found.",
|
||||
"error.INVALID_SEARCH_PROVIDER_REQUEST": "Invalid request argument to search provider: {{reason}}",
|
||||
"error.INVALID_INDEXER_INPUT": "Invalid indexer input: {{reason}}"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user