Eu tenho o seguinte esquema de banco de dados
Produto
Eu ia | Nome | FabricaçãoId |
---|---|---|
Guia (PK) | corda | (FK) |
- | ECOSYS M2640idw | 3 |
- | Infoprint 1140 | 2 |
Fabricação
Eu ia | Nome |
---|---|
(PK) | corda |
1 | Hitachi |
2 | IBM |
3 | Kyocera Mita |
- Ambos os nomes (produto e fabricante) podem consistir em várias palavras;
Tenho uma sequência de pesquisa (fornecida pelo usuário no aplicativo móvel) compilada em uma ordem aleatória (nome do produto, nome do fabricante ou nome do fabricante, nome do produto), os nomes podem ser parciais, preciso selecionar entradas do banco de dados que corresponderão à entrada do usuário, não há delimitadores nas sequências de pesquisa entre as peças de fabricação e do produto.
por exemplo
- entrada de pesquisa:
Kyoce ecos
deve fornecer nos resultados uma entradaECOSYS M2640idw
- entrada de pesquisa:
kyocera mi ecosys
deve fornecer nos resultados uma entradaECOSYS M2640idw
- entrada de pesquisa:
ibm
deve fornecer resultadosInfoprint 1140
Você poderia ajudar a encontrar uma maneira melhor de construir uma consulta SQL para abordar isso no Postgresql?
Obrigado por qualquer ajuda
JOIN Product e Manufacturer e string_to table(entrada de pesquisa).
Em seguida, use LIKE ou ILIKE para palavras de pesquisa e partes de palavras.
Você precisa decidir se vai
Para
search whole words
exemplo de solução fornecido por @Mertuarez,sugiro um exemplo para pesquisar partes de palavras.
Para a entrada de pesquisa 'kyo print' a saída é
violino
Solução:
https://www.postgresql.org/docs/current/sql-refreshmaterializedview.html
Consulta:
Texto completo:
https://neon.tech/postgresql/postgresql-indexes/postgresql-full-text-search