PolarSearch est le service de recherche distribué de PolarDB, qui prend en charge la recherche en texte intégral et la recherche vectorielle. S'appuyant sur OpenSearch, il est compatible avec l'écosystème Elasticsearch et s'intègre étroitement aux bases de données PolarDB. PolarSearch offre une solution tout-en-un qui simplifie la récupération de vos données.
Ce guide suppose que vous possédez des connaissances de base sur Elasticsearch ou OpenSearch. Pour plus d'informations, consultez la documentation OpenSearch.
Prérequis
Configuration requise pour le cluster
Édition du produit : Enterprise Edition.
Série : Cluster Edition.
-
Moteur de base de données : MySQL 8.0.1 ou MySQL 8.0.2.
RemarqueIl n'existe aucune exigence spécifique concernant les versions mineures pour les moteurs de base de données répertoriés ci-dessus. Pour plus d'informations, consultez la section Interroger le numéro de version.
-
Moteur de base de données :
(version mineure du noyau 2.0.18.3.2.0 ou ultérieure)
(version mineure du noyau 2.0.17.9.6.0 ou ultérieure)
(version mineure du noyau 2.0.16.11.15.0 ou ultérieure)
(version mineure du noyau 2.0.15.17.8.0 ou ultérieure)
(version mineure du noyau 2.0.14.22.43.0 ou ultérieure)
Régions et zones de disponibilité prises en charge
PolarSearch est pris en charge dans les zones de disponibilité suivantes :
|
Région |
Zone de disponibilité |
|
Chine (Hangzhou) |
Zone B, Zone I, Zone J, Zone K |
|
Chine (Shanghai) |
Zone E, Zone F, Zone L, Zone N |
|
Chine (Shenzhen) |
Zone C, Zone D, Zone F |
|
Chine (Pékin) |
Zone F, Zone L, Zone I, Zone K |
|
Chine (Zhangjiakou) |
Zone A, Zone B, Zone C |
|
Chine (Ulanqab) |
Zone B, Zone C |
|
Chine (Hong Kong) |
Zone B, Zone C, Zone D |
|
Singapour |
Zone A, Zone B |
|
Japon (Tokyo) |
Zone B, Zone C |
|
Corée du Sud (Séoul) |
Zone A, Zone B |
|
Allemagne (Francfort) |
Zone A |
|
États-Unis (Silicon Valley) |
Zone B |
|
États-Unis (Virginie) |
Zone A, Zone B |
|
Philippines (Manille) |
Zone A |
Si vous avez besoin de la prise en charge de zones de disponibilité supplémentaires, soumettez un ticket.
Facturation
PolarSearch fournit des fonctionnalités de recherche en utilisant des nœuds de recherche dédiés, et des frais sont appliqués pour ces nœuds. Les nœuds de recherche sont facturés selon les règles de Facturation des nœuds de calcul standard. De plus, les index et les données présents dans les nœuds de recherche consomment de l'espace de stockage, lequel est également soumis aux frais de stockage et aux correspondantes.
Ajouter des nœuds de recherche PolarSearch
-
Vous pouvez ajouter des nœuds de recherche à un cluster existant qui satisfait aux Prérequis.
Connectez-vous à la console PolarDB. Dans le volet de navigation de gauche, cliquez sur Clusters. Sélectionnez la région où le cluster est déployé, puis localisez le cluster cible.
Cliquez sur l'ID du cluster pour ouvrir la page Basic Information.
Dans la section Database Nodes, cliquez sur Add/Remove Node.
Dans la boîte de dialogue Add/Remove Node, sélectionnez l'ajout de nœuds de recherche. Le nombre de nœuds de recherche doit être d'au moins 2.
Créer des comptes de nœud de recherche
Configurer le compte administrateur
Le compte que vous ajoutez est un compte standard.
Ce compte standard sert de compte administrateur pour PolarSearch.
Connectez-vous à la console PolarDB. Dans le volet de navigation de gauche, cliquez sur Clusters. Sélectionnez la région où le cluster est déployé, puis localisez le cluster cible.
Cliquez sur l'ID du cluster pour ouvrir la page Basic Information.
Dans la section Database Nodes, placez le curseur sur Search Node et cliquez sur Set Database Account.
-
Dans la boîte de dialogue qui s'affiche, sélectionnez un compte standard existant ou créez-en un nouveau, puis saisissez le mot de passe du compte.
ImportantLe nom du compte de base de données ne peut pas être une sous-chaîne de son mot de passe. La vérification n'est pas sensible à la casse. Par exemple, pour un compte de base de données nommé
search_test, le mot de passe ne peut pas êtreSEARCH_test@123, mais il peut êtreSEARCHtest@123ouSEARCH@_test.
Configurer des comptes standard
Les autorisations des comptes standard peuvent être configurées index par index. Vous pouvez les définir de deux manières : via le Dashboard ou l'API REST.
Configuration via le Dashboard
Le compte doit disposer du rôle security_rest_api_access. Sinon, la page Security ne s'affiche pas.
-
Créer un utilisateur :
Dans le volet de navigation de gauche, accédez à la page , sélectionnez Internal users, puis cliquez sur Create internal user.
Sur la page de création d'utilisateur, saisissez un nom d'utilisateur et un mot de passe pour créer l'utilisateur. Par exemple, créez un utilisateur nommé
testuseravec le mot de passeUSER@test123, puis cliquez sur Create.
-
Créer un rôle
Dans le volet de navigation de gauche, accédez à la page , sélectionnez Roles, puis cliquez sur Create role.
-
Les autorisations de rôle incluent les autorisations de cluster et les autorisations d'index, que vous pouvez configurer en ajoutant des groupes d'actions. Dans le champ Index, spécifiez un nom d'index ou utilisez le caractère générique
*pour faire correspondre un ensemble de noms d'index. Dans la section Index permissions, sélectionnez des autorisations spécifiques, telles que lecture seule ou lecture/écriture.Exemple : Créez un rôle nommé
onlyreadroledisposant des autorisations complètes sur le cluster (unlimited équivaut aux autorisations complètes) et d'une autorisation en lecture seule pour tous les index préfixés parindextest.De plus, les autorisations d'index prennent en charge la configuration de la Document level security (qui restreint la portée des documents accessibles via des instructions de requête JSON) et de la Field level security (qui restreint les champs accessibles).
-
Mapper un rôle à un utilisateur
Dans le volet de navigation de gauche, accédez à la page , sélectionnez Roles, puis cliquez sur le rôle cible.
-
Dans l'onglet Mapped users, ajoutez un mappage d'utilisateur. Un utilisateur peut être mappé à plusieurs rôles et hérite des autorisations de tous les rôles mappés.
Exemple : Mappez le rôle
onlyreadroleà l'utilisateurtestuser. Cela accorde à l'utilisateurtestuserles autorisations du rôleonlyreadrole.Sur la page Map user du rôle
onlyreadrole, ajoutez l'utilisateurtestuserdans la zone Users, puis cliquez sur Map pour terminer le mappage.
Configuration via l'API REST
Les nœuds de recherche prennent en charge le contrôle d'accès complet via des API. Pour plus d'informations, consultez la documentation de l'API OpenSearch.
-
Créer un utilisateur
curl -X PUT "http://<endpoint>:<port>/_plugins/_security/api/internalusers/<new_user>" \ --user "<user_name>:<passwd>" \ -H "Content-Type: application/json" \ -d '{ "password": "<new_password>", "backend_roles": [], "attributes": {} }'Exemple : Créez un utilisateur nommé
testuseravec le mot de passeUSER@test123.curl -X PUT "http://<endpoint>:<port>/_plugins/_security/api/internalusers/testuser" \ --user "<user_name>:<passwd>" \ -H "Content-Type: application/json" \ -d '{ "password": "USER@test123", "backend_roles": [], "attributes": {} }' -
Créer un rôle
curl -X PUT "http://<endpoint>:<port>/_plugins/_security/api/roles/<role_name>" \ --user "<user_name>:<passwd>" \ -H "Content-Type: application/json" \ -d '{ "cluster_permissions": ["*"], "index_permissions": [ { "index_patterns": ["*"], "allowed_actions": ["*"] } ] }'index_patterns: Spécifie les index à configurer. Vous pouvez utiliser le caractère générique*pour configurer plusieurs index simultanément.allowed_actions: Spécifie les autorisations à accorder, telles quereadetwrite.
Exemple : Créez un rôle nommé
onlyreadroledisposant des autorisations complètes sur le cluster et d'une autorisation en lecture seule pour tous les index préfixés parindextest.curl -X PUT "http://<endpoint>:<port>/_plugins/_security/api/roles/onlyreadrole" \ --user "<user_name>:<passwd>" \ -H "Content-Type: application/json" \ -d '{ "cluster_permissions": ["*"], "index_permissions": [ { "index_patterns": ["indextest*"], "allowed_actions": ["read"] } ] }' -
Mapper un rôle
curl -X PUT "http://<endpoint>:<port>/_plugins/_security/api/rolesmapping/<role_name>" \ --user "<user_name>:<passwd>" \ -H "Content-Type: application/json" \ -d '{ "backend_roles": [], "hosts": [], "users": ["<new_user>"] }'Exemple : Mappez le rôle
onlyreadroleà l'utilisateurtestuser. Cela accorde à l'utilisateurtestuserles autorisations du rôleonlyreadrole.curl -X PUT "http://<endpoint>:<port>/_plugins/_security/api/rolesmapping/onlyreadrole" \ --user "<user_name>:<passwd>" \ -H "Content-Type: application/json" \ -d '{ "backend_roles": [], "hosts": [], "users": ["testuser"] }'
Obtenir les endpoints de connexion
Endpoint de recherche
Dans la section Database Nodes, placez le curseur sur un Search Node pour obtenir l'endpoint privé ou public correspondant à votre environnement.
Endpoint du Dashboard
Dans la section Database Nodes, placez le curseur sur un Search Node pour obtenir l'endpoint Dashboard privé ou public correspondant à votre environnement.
Se connecter à PolarSearch
Connexion via l'endpoint de recherche
Si vous préférez gérer les index et les données via des API, vous pouvez vous connecter à PolarSearch par le biais de son endpoint de recherche. L'exemple suivant montre comment se connecter depuis une instance ECS.
-
Configurer les listes d'autorisation pour un cluster : Ajoutez l'adresse IP de votre instance ECS à la liste d'autorisation du cluster PolarDB for MySQL.
RemarqueSi votre instance ECS et le cluster PolarDB for MySQL se trouvent dans le même VPC, ajoutez l'adresse IP privée de l'instance ECS à la liste d'autorisation.
Si votre instance ECS et le cluster PolarDB for MySQL ne se trouvent pas dans le même VPC, ajoutez l'adresse IP publique de l'instance ECS à la liste d'autorisation.
-
Connectez-vous à PolarSearch : Exécutez la commande suivante. Si la commande renvoie les informations du cluster, la connexion est réussie. Remplacez
<endpoint>:<port>par l'endpoint de recherche de PolarSearch et<user_name>:<passwd>par le compte administrateur de PolarSearch.curl http://<endpoint>:<port>/ -u <user_name>:<passwd>
Connexion via le Dashboard
Si vous préférez gérer PolarSearch via une interface graphique, vous pouvez y accéder par le biais du Dashboard. L'exemple suivant utilise un navigateur dans un environnement local :
Configurer les listes d'autorisation pour un cluster : Ajoutez l'adresse IP publique de votre machine locale à la liste d'autorisation du cluster PolarDB for MySQL.
-
Connectez-vous à la console PolarSearch dans un navigateur :
Dans la barre d'adresse de votre navigateur, saisissez
http://<endpoint>:<port>et appuyez sur Entrée. Remplacez<endpoint>:<port>par l'endpoint public du Dashboard pour PolarSearch.Sur la page de connexion, saisissez les identifiants du compte administrateur pour PolarSearch afin d'accéder à la console PolarSearch compatible avec Kibana.
Exemples
Tous les exemples de cette section sont exécutés depuis la ligne de commande sur une instance ECS.
PolarSearch est entièrement compatible avec le SDK et l'API REST d'OpenSearch 2.19.0. L'utilisation d'autres versions peut entraîner des problèmes de compatibilité. Pour plus d'informations, consultez la documentation OpenSearch.
Créer un index
Un index dans un nœud de recherche est analogue à une table dans une base de données relationnelle. Vous pouvez créer un index en utilisant une API REST compatible avec Elasticsearch ou en exécutant des commandes directement dans le Dashboard. Voici quelques exemples :
CLI
curl -XPUT "http://<endpoint>:<port>/articles" \
--user "<user_name>:<passwd>" \
-H 'Content-Type: application/json' \
-d '{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"title": {
"type": "text"
},
"content": {
"type": "text"
},
"author": {
"type": "keyword"
}
}
}
}'
Dashboard
PUT articles
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"title": {
"type": "text"
},
"content": {
"type": "text"
},
"author": {
"type": "keyword"
}
}
}
}
Importer des données
CLI
curl -XPOST "http://<endpoint>:<port>/articles/_bulk" \
--user "<user_name>:<passwd>" \
-H 'Content-Type: application/json' \
-d '
{"index": {}}
{"title": "Introduction to PolarSearch", "content": "PolarSearch is a powerful search engine.", "author": "Allen"}
{"index": {}}
{"title": "Advanced Search Techniques", "content": "Learn how to use full-text search and filters in PolarDB.", "author": "Lang"}
{"index": {}}
{"title": "Elasticsearch vs PolarSearch", "content": "A comparison of Elasticsearch and PolarSearch features.", "author": "Zhao"}
'
Dashboard
POST articles/_bulk
{"index": {}}
{"title": "Introduction to PolarSearch", "content": "PolarSearch is a powerful search engine.", "author": "Allen"}
{"index": {}}
{"title": "Advanced Search Techniques", "content": "Learn how to use full-text search and filters in PolarDB.", "author": "Lang"}
{"index": {}}
{"title": "Elasticsearch vs PolarSearch", "content": "A comparison of Elasticsearch and PolarSearch features.", "author": "Zhao"}
Exécuter une requête de recherche
Une fois les données importées, vous pouvez effectuer une recherche en texte intégral à l'aide d'un SDK, de l'API REST ou du Dashboard. Les exemples suivants illustrent la procédure :
CLI
curl -XGET "http://<endpoint>:<port>/articles/_search" \
--user "<user_name>:<passwd>" \
-H 'Content-Type: application/json' \
-d '
{
"query": {
"match": {
"content": "PolarSearch"
}
}
}'
Dashboard
GET articles/_search
{
"query": {
"match": {
"content": "PolarSearch"
}
}
}
Pour plus d'informations sur la syntaxe des requêtes de recherche, consultez la documentation OpenSearch.
Créer un index vectoriel
CLI
curl -XPUT "http://<endpoint>:<port>/my-vector-index" \
--user "<user_name>:<passwd>" \
-H "Content-Type:application/json" \
-d '
{
"settings": {
"index": {
"knn": true
}
},
"mappings": {
"properties": {
"vector_field": {
"type": "knn_vector",
"dimension": 4
},
"metadata": {
"type": "text"
}
}
}
}
'
Dashboard
PUT my-vector-index
{
"settings": {
"index": {
"knn": true
}
},
"mappings": {
"properties": {
"vector_field": {
"type": "knn_vector",
"dimension": 4
},
"metadata": {
"type": "text"
}
}
}
}
Insérer des données vectorielles
CLI
curl -XPOST "http://<endpoint>:<port>/my-vector-index/_bulk" \
--user "<user_name>:<passwd>" \
-H "Content-Type:application/json" \
-d '
{"index": {}}
{"vector_field": [0.1, 0.5, -0.3, 0.8], "metadata": "Document 1"}
{"index": {}}
{"vector_field": [-0.2, 0.7, 0.4, -0.1], "metadata": "Document 2"}
'
Dashboard
POST my-vector-index/_bulk
{"index": {}}
{"vector_field": [0.1, 0.5, -0.3, 0.8], "metadata": "Document 1"}
{"index": {}}
{"vector_field": [-0.2, 0.7, 0.4, -0.1], "metadata": "Document 2"}
Recherche vectorielle
CLI
curl -XGET "http://<endpoint>:<port>/my-vector-index/_search" \
--user "<user_name>:<passwd>" \
-H "Content-Type:application/json" \
-d '
{
"size": 2,
"query": {
"knn": {
"vector_field": {
"vector": [0.1, 0.5, -0.3, 0.8],
"k": 2
}
}
}
}
'
Dashboard
GET my-vector-index/_search
{
"size": 2,
"query": {
"knn": {
"vector_field": {
"vector": [0.1, 0.5, -0.3, 0.8],
"k": 2
}
}
}
}