2013-01-15 15 views
7

Mam bazę danych MySQL (wersja 5.5.28) ze stołem tak:wyszukiwanie pełnotekstowe z InnoDB w MySQL

products (InnoDB) 
------------------------------------------------- 
search_id  title    description 
1    Levi Blue Jeans  Some cool jeans 
2    Gucci Handbag  Great accessory 
3    Prada Dress   Beautiful dress 

chcę zrobić coś takiego w MySQL:

SELECT MATCH(title) AGAINST ('Jeans') AS score, search_id, FROM search WHERE MATCH(title) AGAINST ('Jeans' IN BOOLEAN MODE) 

O ile wiem, możesz to zrobić tylko w MyISAM. Czy to możliwe, aby wykonać wyszukiwanie podobna InnoDB bez uciekania się do rzeczy jak:

dla mojej aplikacji (około 1000 - 2000 rekordów) Sphinx etc. wydaje się przesadą. Ale dodanie każdej płyty do tablicy i przeszukiwanie jej za pomocą PHP też wydaje się zbyt duże. Ale może się nie zgadzasz.

PS. LIKE wydaje się nie działać dobrze dla mnie. Wyniki są zazwyczaj mniej dokładne i nie można uzyskać wyniku, jak to możliwe z MATCH.

+0

Wygląda na to, że MySQL 6 będzie obsługiwał niektóre [funkcje pełnego tekstu] (http://www.drdobbs.com/database/full-text-search-with-innodb/231902587), ale może być konieczne użycie czegoś innego w w międzyczasie. – jakerella

Odpowiedz

13

Powiel kolumnę tekstu z products do nowej tabeli MyISAM. Ustanów relację 1-1 pomiędzy tymi dwoma i, w celu zapewnienia ACID'ów dostarczonych przez InnoDB, upewnij się, że zawsze uzyskujesz dostęp do tabeli MyISAM razem z products.

Możesz chcieć dodać wyzwalacze na products, aby zachować bijection. Możesz także utworzyć widok, aby przeróbka była minimalna w twojej aplikacji, gdy uaktualnisz do MySQL w wersji 5.6 (i upuść to zawiłe obejście). Jest to the full monty.

Zamiast kopiować kolumnę z tekstem, można ją całkowicie przenieść (usunąć z products). Byłoby to bardziej wydajne, ale nieco bardziej skomplikowało by przejście na rozwiązanie InnoDB, gdy masz ochotę na uaktualnienie.

+0

Przyjemny przykład Fiddle SQL. – Wolf

+0

super łatwe rozwiązanie dla trudnego pytania. działa jak marzenie. :) – kishu27

Powiązane problemy