Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alanrg.83

Busca com relevância

Recommended Posts

Preciso de ajuda ou orientação de como posso fazer um sistema de busca com relevância de palavras.

Tenho em uma tabela do Mysql um campo onde descrevo um produto. Gostaria de que quando um usuário fizesse uma busca, as palavras digitadas fossem comparadas com o campo de descrição e que os registros fossem devolvidos pela ordem de número de palavras contidas no comentário que também estavam na pesquisa do usuário... Deu para entender ou ficou confuso? =/

 

Ex, se digitei "Monitor Sansung preto"

 

Ele me traz primeiro todos os monitores Sansung pretos, depois os monitores Sansung ou monitores pretos e depois só os monitores ou só os Sansung

Existe algo assim por aqui para eu consultar, ou alguem já desenvolvel algo parecido?

 

Achei essa explicação mas está em ASP, precisava de algo que funcione do mesmo jeito mas em php

 

Sistema de Busca com Relevância, em ASP/MySQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele me traz primeiro todos os monitores Sansung pretos, depois os monitores Sansung ou monitores pretos e depois só os monitores ou só os Sansung

Existe algo assim por aqui para eu consultar, ou alguem já desenvolvel algo parecido?

 

Bom, primeiro você precisa criar um índice FULLTEXT na sua tabela:

 

mysql> create table `teste`(
    -> `id` mediumint(8) unsigned not null auto_increment,
    -> `nome` varchar(20) not null,
    -> `descricao` varchar(100) not null,
    -> primary key(`id`),
    -> fulltext (`nome`,`descricao`)
    -> ) engine=MyISAM;
Query OK, 0 rows affected (0.01 sec)

Inserindo alguns registros para testar:

 

mysql> insert into `teste`(`nome`,`descricao`) values
    -> ('Monitor Sansung','Monitor Sansung Preto'),
    -> ('Monitor Philips','Monitor digital preto'),
    -> ('Monitor Sansung','Monitor Sansung Prata');
Query OK, 3 rows affected (0.43 sec)
Records: 3  Duplicates: 0  Warnings: 0

Testando:

 

mysql> select * from `teste` where match(`nome`,`descricao`) against ('Monitor Sansung Preto' IN BOOLEAN MODE );
+----+-----------------+-----------------------+
| id | nome            | descricao             |
+----+-----------------+-----------------------+
|  1 | Monitor Sansung | Monitor Sansung Preto |
|  2 | Monitor Philips | Monitor digital preto |
|  3 | Monitor Sansung | Monitor Sansung Prata |
+----+-----------------+-----------------------+
3 rows in set (0.00 sec)

E viva o índice FULLTEXT !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Movido: PHP=>MySQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.