O PolarSearch é o serviço de busca distribuída do PolarDB, com suporte a busca de texto completo e busca vetorial. Desenvolvido sobre o OpenSearch, ele é compatível com o ecossistema Elasticsearch e integra-se diretamente aos bancos de dados PolarDB. O PolarSearch oferece uma solução completa que simplifica a recuperação dos seus dados.
Este guia pressupõe conhecimento básico de Elasticsearch ou OpenSearch. Para mais informações, consulte a Documentação do OpenSearch.
Sites: Site da China e Site Internacional
Contato por ticket: Nianzi
Este recurso, anteriormente disponível apenas mediante lista de permissões, agora está geralmente disponível, mas restrito a zonas de disponibilidade específicas. Para solicitar suporte a zonas de disponibilidade adicionais, envie um ticket.
Pré-requisitos
Requisitos de configuração do cluster
Edição do produto: Enterprise Edition.
Série: Cluster Edition.
-
Mecanismo de banco de dados: MySQL 8.0.1 ou MySQL 8.0.2.
NotaNão há requisitos específicos de versão secundária para os mecanismos de banco de dados listados acima. Para mais informações, consulte Consultar o número da versão.
-
Alternativamente, para o mecanismo de banco de dados PostgreSQL:
(versão secundária do kernel 2.0.18.3.2.0 ou posterior)
(versão secundária do kernel 2.0.17.9.6.0 ou posterior)
(versão secundária do kernel 2.0.16.11.15.0 ou posterior)
(versão secundária do kernel 2.0.15.17.8.0 ou posterior)
(versão secundária do kernel 2.0.14.22.43.0 ou posterior)
Regiões e zonas de disponibilidade suportadas
O PolarSearch tem suporte nas seguintes zonas de disponibilidade:
|
Região |
Zona de disponibilidade |
|
China (Hangzhou) |
Zona K, Zona J |
|
China (Shanghai) |
Zona E, Zona F, Zona L, Zona N |
|
China (Shenzhen) |
Zona C, Zona D, Zona F |
|
China (Beijing) |
Zona F, Zona L, Zona I, Zona K |
|
China (Zhangjiakou) |
Zona B |
|
China (Ulanqab) |
Zona B, Zona C |
|
China (Hong Kong) |
Zona B, Zona D |
|
Singapura |
Zona A, Zona B |
|
Japão (Tóquio) |
Zona A, Zona C |
|
Coreia do Sul (Seul) |
Zona A, Zona B |
|
Alemanha (Frankfurt) |
Zona A |
|
EUA (Vale do Silício) |
Zona B |
|
Filipinas (Manila) |
Zona A |
Caso necessite de suporte para zonas de disponibilidade adicionais, envie um ticket.
Faturamento
O PolarSearch fornece funcionalidade de busca por meio de nós de busca dedicados, sujeitos a cobrança. O faturamento desses nós segue as regras de Faturamento de nós de computação comuns. Além disso, os índices e dados nos nós de busca consomem espaço de armazenamento, sujeito às respectivas taxas de armazenamento e .
Adicionar nós de busca do PolarSearch
-
Adicione nós de busca a um cluster existente que atenda aos Pré-requisitos.
Faça login no console do PolarDB. No painel de navegação à esquerda, clique em Clusters. Em seguida, selecione a região do cluster e localize o cluster desejado.
Clique no id do cluster para abrir a página Basic Information.
-
Na seção Database Nodes, clique em Add/Remove Node.

No assistente Add/Remove Node, escolha adicionar um nó de busca.
Criar contas de nó de busca
Configurar a conta de administrador
A conta adicionada é uma conta padrão.
Essa conta padrão funciona como a conta de administrador do PolarSearch.
Faça login no console do PolarDB. No painel de navegação à esquerda, clique em Clusters. Em seguida, selecione a região do cluster e localize o cluster desejado.
Clique no id do cluster para abrir a página Basic Information.
-
Na seção Database Nodes, passe o mouse sobre Search Node e clique em Set Database Account.

-
Na caixa de diálogo exibida, selecione uma conta padrão existente ou crie uma nova e insira a senha da conta.
ImportanteO nome da conta de banco de dados não pode ser uma substring de sua senha. A verificação não diferencia maiúsculas de minúsculas. Por exemplo, para uma conta de banco de dados chamada
search_test, a senha não pode serSEARCH_test@123, mas pode serSEARCHtest@123ouSEARCH@_test.
Configurar contas padrão
Configure as permissões das contas padrão individualmente por índice. Defina-as pelo Dashboard ou pela REST API.
Configuração via Dashboard
A conta deve possuir a função security_rest_api_access. Caso contrário, a página Security não será exibida.
-
Criar um usuário:
No painel de navegação à esquerda, acesse a página , selecione Internal users e clique em Create internal user.

Na página de criação de usuário, insira um nome de usuário e senha para criá-lo. Por exemplo, crie um usuário chamado
testusercom a senhaUSER@test123e clique em Create.
-
Criar uma função
No painel de navegação à esquerda, acesse a página , selecione Roles e clique em Create role.

-
As permissões da função incluem permissões de cluster e de índice, configuráveis mediante a adição de grupos de ações. No campo Index, especifique um nome de índice ou utilize o caractere curinga
*para corresponder a um conjunto de nomes de índice. Na seção Index permissions, selecione permissões específicas, como somente leitura ou leitura/escrita.Exemplo: Crie uma função chamada
onlyreadrolecom permissões totais de cluster (ilimitado equivale a permissões totais) e permissão de somente leitura para todos os índices com o prefixoindextest.
-
Mapear uma função para um usuário
No painel de navegação à esquerda, acesse a página , selecione Roles e clique na função desejada.
-
Na aba Mapped users, adicione um mapeamento de usuário. Um usuário pode ser mapeado para várias funções e herda as permissões de todas as funções mapeadas.
Exemplo: Mapeie a função
onlyreadrolepara o usuáriotestuser. Isso concede ao usuáriotestuseras permissões da funçãoonlyreadrole.
Configuração via REST API
Os nós de busca suportam controle de acesso total por meio de APIs. Para mais detalhes, consulte a documentação da API do OpenSearch.
-
Criar um usuário
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": {} }'Exemplo: Crie um usuário chamado
testusercom a senhaUSER@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": {} }' -
Criar uma função
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: Especifica os índices a serem configurados. Utilize o caractere curinga*para configurar múltiplos índices simultaneamente.allowed_actions: Define as permissões a conceder, comoreadewrite.
Exemplo: Crie uma função chamada
onlyreadrolecom permissões totais de cluster e permissão de somente leitura para todos os índices com o prefixoindextest.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"] } ] }' -
Mapear uma função
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>"] }'Exemplo: Mapeie a função
onlyreadrolepara o usuáriotestuser. Isso concede ao usuáriotestuseras permissões da funçãoonlyreadrole.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"] }'
Obter endpoints de conexão
Endpoint de busca
Na seção Database Nodes, passe o mouse sobre um Search Node para obter o endpoint privado ou público correspondente ao seu ambiente.

Endpoint do Dashboard
Na seção Database Nodes, passe o mouse sobre um Search Node para obter o endpoint privado ou público do Dashboard correspondente ao seu ambiente.
Conectar-se ao PolarSearch
Conexão via endpoint de busca
Para gerenciar índices e dados por meio de APIs, conecte-se ao PolarSearch pelo endpoint de busca. O exemplo a seguir demonstra a conexão a partir de uma instância ecs.
-
Configurar a lista de permissões do cluster: Adicione o endereço IP da sua instância ecs à lista de permissões do cluster PolarDB.
NotaSe a instância ecs e o cluster PolarDB estiverem na mesma virtual private cloud (vpc), adicione o endereço IP privado da instância ecs à lista de permissões.
Caso a instância ecs e o cluster PolarDB não estejam na mesma vpc, adicione o endereço IP público da instância ecs à lista de permissões.
-
Conecte-se ao PolarSearch: Execute o comando abaixo. Se o comando retornar informações do cluster, a conexão foi bem-sucedida. Substitua
<endpoint>:<port>pelo endpoint de busca do PolarSearch e<user_name>:<passwd>pela conta de administrador do PolarSearch.curl http://<endpoint>:<port>/ -u <user_name>:<passwd>
Conexão via Dashboard
Para gerenciar o PolarSearch por uma interface gráfica, acesse-o pelo Dashboard. O exemplo a seguir utiliza um navegador em ambiente local:
Configurar a lista de permissões do cluster: Adicione o endereço IP público da sua máquina local à lista de permissões do cluster PolarDB.
-
Faça login no console do PolarSearch em um navegador:
Na barra de endereços do navegador, insira
http://<endpoint>:<port>e pressione Enter. Substitua<endpoint>:<port>pelo endpoint público do Dashboard do PolarSearch.Na página de login, insira as credenciais da conta de administrador do PolarSearch para acessar o console do PolarSearch compatível com Kibana.
Exemplos
Todos os exemplos nesta seção são executados via linha de comando em uma instância ecs.
O PolarSearch é totalmente compatível com o SDK e a REST API do OpenSearch 2.19.0. O uso de outras versões pode causar problemas de compatibilidade. Para mais informações, consulte OpenSearch.
Criar um índice
Um índice em um nó de busca equivale a uma tabela em um banco de dados relacional. Crie um índice usando uma REST API compatível com Elasticsearch ou executando comandos diretamente no Dashboard. Veja os exemplos a seguir:
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"
}
}
}
}
Importar dados
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"}
Executar uma consulta de busca
Após importar os dados, execute buscas de texto completo utilizando um SDK, a REST API ou o Dashboard. Os exemplos abaixo demonstram como proceder:
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"
}
}
}
Para mais detalhes sobre a sintaxe de consultas de busca, consulte a documentação do OpenSearch.
Criar um índice vetorial
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"
}
}
}
}
Inserir dados vetoriais
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"}
Busca vetorial
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
}
}
}
}