Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> FULLTEXT search a indeksy
Walian
post 21.02.2010, 20:35:12
Post #1





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


Zamierzam teraz zrobić wyszukiwarkę do artykułów.
Chciałbym zrobić ją dość rozbudowaną - możliwość wyszukiwania wg. nazwy, opisu, treści, daty dodania z pewnego przedziału, daty ostatniej modyfikacji z pewnego przedziału, nicku dodającego itp.

No więc zacząłem szukać informacji o tym, jak utworzyć indeksy dla takiego wyszukiwania i natrafiłem na to:
http://www.kacka.pl/index.php?showtopic=132
Sporo tych indeksów dodał...
Weźmy pod uwagę, że nie zawsze użytkownik wypełni wszystkie pola wyszukiwarki bo np. chce wyszukać tylko w nazwie, a innym razem w treści, a jeszcze innym razem w nazwie i treści.
Czy do stworzenia takiej wyszukiwarki konieczne będzie dodanie aż tylu indeksów?

Tabela:
  1. CREATE TABLE `articles` (
  2. `article_id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `article_category_id` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, -- *
  4. `article_status` tinyint(3) UNSIGNED NOT NULL DEFAULT 0,
  5. `article_views` int(11) UNSIGNED NOT NULL DEFAULT 0, -- *
  6. `article_date_added` datetime NOT NULL, -- *
  7. `article_date_modified` datetime NOT NULL, -- *
  8. `article_desc` tinytext COLLATE utf8_polish_ci NOT NULL, -- *
  9. `article_content` mediumtext COLLATE utf8_polish_ci NOT NULL, -- *
  10. `article_adder` varchar(12) COLLATE utf8_polish_ci NOT NULL DEFAULT '', -- *
  11. `article_last_changer` varchar(12) COLLATE utf8_polish_ci NOT NULL DEFAULT '',
  12. `article_name` varchar(64) COLLATE utf8_polish_ci NOT NULL DEFAULT '', -- *
  13. `article_safe_name` varchar(64) COLLATE utf8_polish_ci NOT NULL DEFAULT '',
  14. PRIMARY KEY (`article_id`),
  15. UNIQUE KEY `article_name` (`article_name`),
  16. UNIQUE KEY `article_safe_name` (`article_safe_name`),
  17. KEY `article_category_id` (`article_category_id`)
  18. ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


Pola oznaczone "-- *" to pola wg. których chcę umożliwić wyszukiwanie.
Dodatkowo wyszukiwarka będzie ograniczać wyniki wyszukiwania do artykułów o pewnym statusie.
Go to the top of the page
+Quote Post
Mchl
post 22.02.2010, 00:02:39
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Jeżeli chcesz w danej kolumnie robić wyszukiwanie pełnotekstowe, to musisz mieć na niej index FULLTEXT. Po prostu.

Osobną sprawą jest, czy warto to robić dla kolumny VARCHAR(64)

W takim wypadku lepeij będzie się raczej sprawdzało LIKE
Go to the top of the page
+Quote Post
Walian
post 22.02.2010, 09:24:44
Post #3





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


Cytat("Mchl")
Jeżeli chcesz w danej kolumnie robić wyszukiwanie pełnotekstowe, to musisz mieć na niej index FULLTEXT. Po prostu.

Tak tak, wiem o tym.

Ale wciąż nie wiem jak zrobić te indeksy - czy wystarczy po jednym na pole czy porobić też dodatkowo indeksy łączone tzn. jeden na kilka pól? A może tylko te ostatnie? Te ostatnie się chyba nazywają "kompozytowe".

I co do LIKE - kiedyś wyczytałem, że lepiej jest robić to na REGEXP - co jest prawdą?
Które będzie szybsze?

Ten post edytował Walian 22.02.2010, 09:25:42
Go to the top of the page
+Quote Post
Mchl
post 22.02.2010, 10:01:40
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Oczywiście możesz zrobić indeks na kilku kolumnach, tylko że wtedy musisz zawsze szukać AGAINST wszystkich kolumn w tym indeksie. Tak więc jeżeli ważne jest dla Ciebie żeby użytkownik mógł szukać po konkretnej kolumnie, to musisz mieć dla tej kolumny osobny indeks.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 09:35