Ir para conteúdo

POWERED BY:

Arquivado

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

Ismael_davi

[Resolvido] Como criar indices full text no mysql ?

Recommended Posts

Estou desenvolvendo uma pesquisa no banco de dados utilizando o php e mysql, ocorre que estou utilizando o recurso Full text do mysql a condição de pesquisa e essa:

 

SELECT *
FROM assistencias
WHERE MATCH (nome_fant, marcas, aparelho, estado) against (%campo% in boolean mode) OR  (marcas LIKE %campo%) OR (nome_fant LIKE %campo%) OR (estado LIKE %campo%) OR (aparelho LIKE %campo%) OR (codigo = campo)

Essa pesquisa me retorna de forma desordenada a pesquisa relizada pelo comando WHERE MATCH, depois de ler pela net descobri que quando se utiliza a condição IN BOOLEAN MODE os resultados são assim mesmo. Então resolvi retirar a condição, sendo que retornou um erro no mysql :

Não pode encontrar um índice para o texto todo que combine com a lista de colunas

Pesquisando descobri que a utilização do IN BOOLEAN MODE não necessita de indices full text, e ai foi nisso que empaquei, pois não sei como criar indices FULL TEXT ou catalogos como li. Estou boiando !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fórum errado.

Movido: PHP=>MySQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Márcio, como vai?

 

Realmente, utilizando o IN BOOLEAN MODE, você não precisa se preocupar com o índice FULL TEXT, embora não utilizando, sua query fique mais lenta.

Para utilizar o IN NATURAL LANGUAGE MODE (padrão), você precisa criar os índices FULL TEXT.

 

Se você ainda não criou sua tabela, ou vai recriá-la:

CREATE TABLE articles (
	id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
	title VARCHAR(200),
	body TEXT,
	FULLTEXT (title,body)
);

Se você já criou, pode apenas adicionar o índice desejado utilizando ALTER TABLE, como no exemplo:

ALTER TABLE articles ADD FULLTEXT INDEX nome_do_indice (title, body);

Se você quer apagar o seu índice:

ALTER TABLE articles DROP INDEX nome_do_indice;

Se você não quer apagar, apenas modificá-lo, você pode fazer da seguinte forma:

ALTER TABLE articles
  DROP INDEX nome_do_indice,
  ADD FULLTEXT INDEX nome_do_indice (title, body, keywords);

Sugestão: Utilize um editor front-end, como o SQL-Front.

A maioria deles já oferece uma interface para editar índices com fulltext.

 

Informações retiradas do Manual:

http://dev.mysql.com/doc/refman/5.1/en/ful...l-language.html

 

Boa sorte, e abraços!

 

--

www.imaginacom.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou desenvolvendo uma pesquisa no banco de dados utilizando o php e mysql, ocorre que estou utilizando o recurso Full text do mysql a condição de pesquisa e essa:

 

SELECT *
FROM assistencias
WHERE MATCH (nome_fant, marcas, aparelho, estado) against (%campo% in boolean mode) OR  (marcas LIKE %campo%) OR (nome_fant LIKE %campo%) OR (estado LIKE %campo%) OR (aparelho LIKE %campo%) OR (codigo = campo)

Essa pesquisa me retorna de forma desordenada a pesquisa relizada pelo comando WHERE MATCH, depois de ler pela net descobri que quando se utiliza a condição IN BOOLEAN MODE os resultados são assim mesmo. Então resolvi retirar a condição, sendo que retornou um erro no mysql :

Não pode encontrar um índice para o texto todo que combine com a lista de colunas

Pesquisando descobri que a utilização do IN BOOLEAN MODE não necessita de indices full text, e ai foi nisso que empaquei, pois não sei como criar indices FULL TEXT ou catalogos como li. Estou boiando !!

 

esse tópico pareçe "véio" demais, mas vou responder, talvez alguém está procurando alguma resposta!

 

Para usar indices FULLTEXT você deve mudar o Storage Engine da tabela para MYISAM, digite na consulta SQL o seguinte:

 

ALTER TABLE `nome_tabela`  ENGINE = MYISAM ;

ALTER TABLE `nome_tabela` ADD FULLTEXT ( `nome_campo` );

e o codigo da consulta é:

	$result=mysql_query("SELECT * FROM `assistencias` WHERE MATCH (nome_fant, marcas, aparelho, estado) AGAINST ('%".$palavra_chave."%' in boolean mode) ",$con);

Ismael_davi, é isso que você queria? "Talvez naum responda mais porque esse tópico é de 2 anos atrás, rsrsrs"

 

if(sim){

Tópico RESOLVIDO;

}

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.