O PolarSearch é o serviço de busca distribuída do PolarDB, com suporte a busca de texto completo e busca vetorial. Construído 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 que você tenha conhecimento básico de Elasticsearch ou OpenSearch. Para mais informações, consulte a Documentação do OpenSearch.
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 {{XREF_0}}.
-
Mecanismo de banco de dados:
(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 é suportado nas seguintes zonas de disponibilidade:
|
Região |
Zona de disponibilidade |
|
China (Hangzhou) |
Zone B, Zone I, Zone J, Zone K |
|
China (Shanghai) |
Zone E, Zone F, Zone L, Zone N |
|
China (Shenzhen) |
Zone C, Zone D, Zone F |
|
China (Beijing) |
Zone F, Zone L, Zone I, Zone K |
|
China (Zhangjiakou) |
Zone A, Zone B, Zone C |
|
China (Ulanqab) |
Zone B, Zone C |
|
China (Hong Kong) |
Zone B, Zone C, Zone D |
|
Singapore |
Zone A, Zone B |
|
Japan (Tokyo) |
Zone B, Zone C |
|
South Korea (Seoul) |
Zone A, Zone B |
|
Germany (Frankfurt) |
Zone A |
|
US (Silicon Valley) |
Zone B |
|
US (Virginia) |
Zone A, Zone B |
|
Philippines (Manila) |
Zone 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, e são cobradas taxas referentes a esses nós. Os nós de busca são faturados com base em {{XREF_1}}{{XREF_2}}. Além disso, os índices e dados nos nós de busca consomem espaço de armazenamento, sujeito também às respectivas {{XREF_3}} e {{XREF_4}}.
Adicionar nós de busca do PolarSearch
-
Adicione nós de busca a um cluster existente que atenda aos {{XREF_5}}.
Faça login no console do PolarDB, no painel de navegação à esquerda, clique em Clusters. Selecione a Region onde o cluster está implantado 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.
-
Na caixa de diálogo Add/Remove Node
, selecione a opção para adicionar nós de busca. A quantidade de nós de busca deve ser de pelo menos 2.
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. Selecione a Region onde o cluster está implantado 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 da 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
As permissões das contas padrão podem ser configuradas individualmente por índice. É possível defini-las de duas maneiras: 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 uma senha para criar o usuário. 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 permissões de índice, configuráveis mediante a adição de grupos de ações. No campo Index, especifique um nome de índice ou utilize o curinga
*para corresponder a um conjunto de nomes de índice. Na seção Index permissions, selecione as permissões específicas, como somente leitura ou leitura/gravação.Exemplo: Crie uma função chamada
onlyreadroleque tenha permissões totais de cluster (ilimitado equivale a permissões totais) e permissão de somente leitura para todos os índices com o prefixoindextest.Além disso, as permissões de índice suportam a configuração de Document level security (que restringe o escopo de documentos acessíveis por meio de instruções de consulta JSON) e Field level security (que restringe os campos acessíveis).
-
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.Na página Map user da função
onlyreadrole, adicione o usuáriotestuserna área Users e clique em Map para concluir o mapeamento.
Configuração via REST API
Os nós de busca suportam controle de acesso total por meio de APIs. Para mais informações, 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 curinga*para configurar vários índices simultaneamente.allowed_actions: Define as permissões a serem concedidas, 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
Conectar via endpoint de busca
Se preferir gerenciar índices e dados usando APIs, conecte-se ao PolarSearch através do seu endpoint de busca. O exemplo a seguir demonstra como se conectar a partir de uma instância ECS.
-
{{XREF_9}}{{XREF_10}}: Adicione o endereço IP da sua instância ECS à lista de permissões do cluster PolarDB for MySQL.
NotaSe a sua instância ECS e o cluster PolarDB for MySQL estiverem na mesma VPC, adicione o endereço IP privado da instância ECS à lista de permissões.
Se a sua instância ECS e o cluster PolarDB for MySQL não estiverem 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 {{XREF_11}} do PolarSearch e<user_name>:<passwd>pelas {{XREF_12}} do PolarSearch.curl http://<endpoint>:<port>/ -u <user_name>:<passwd>
Conectar via Dashboard
Se preferir gerenciar o PolarSearch usando uma interface gráfica, acesse-o através do Dashboard. O exemplo a seguir utiliza um navegador em um ambiente local:
{{XREF_13}}{{XREF_14}}: Adicione o endereço IP público da sua máquina local à lista de permissões do cluster PolarDB for MySQL.
-
Faça login no console do PolarSearch em um navegador:
Na barra de endereços do seu navegador, insira
http://<endpoint>:<port>e pressione Enter. Substitua<endpoint>:<port>pelo {{XREF_15}} do PolarSearch.Na página de login, insira as credenciais {{XREF_16}} do PolarSearch para acessar o console do PolarSearch compatível com Kibana.
Exemplos
Todos os exemplos nesta seção são executados a partir da linha de comando em uma instância ECS.
O PolarSearch é totalmente compatível com o SDK do OpenSearch 2.19.0 e a REST API. 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 é análogo 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, realize uma busca de texto completo utilizando um SDK, a REST API ou o Dashboard. Os exemplos a seguir 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 informações 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
}
}
}
}