Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: full text search jak przyspieszyć
Forum PHP.pl > Forum > Bazy danych > MySQL
lobopol
Mam bazę:
article
-id
-title fulltext
-content fulltext
-status index

tag
-id
-name fulltext

article_tag
-id
-tagId
-articleId

i chciałbym wyciągnąć wpisy które mogą zawierać jakąś frazę (gdzie fraz może być do 10 różnych) w article.title, article.content bądź w przypisanym tagu gdzie artykuł ma status 1 i posortowane po ilości trafień
Na razie mam takie zapytania

zliczenie wyników
  1. SELECT SQL_NO_CACHE count(DISTINCT article.id) AS number FROM article LEFT JOIN article_tag ON (article_tag.articleId = article.id) LEFT JOIN tags ON (tags.id =
  2. article_tag.tagId) WHERE article.STATUS = 1 AND (match(article.title, article.content, tags.name) against ("gggg*" IN BOOLEAN mode))>0


  1. SELECT SQL_NO_CACHE DISTINCT article.id, article.title, article.img, article.published, article.content, article.vote_false, article.vote_true,
  2. article.imgSource, match(article.title, article.content, tags.name) against ("gggg*" IN BOOLEAN mode) AS sort FROM article LEFT JOIN article_tag ON
  3. (article_tag.articleId = article.id) LEFT JOIN tags ON (tags.id = article_tag.tagId) WHERE article.STATUS = 1 AND match(article.title, article.content,
  4. tags.name) against ("gggg*" IN BOOLEAN mode) HAVING sort>0 ORDER BY sort DESC, article.published DESC LIMIT 0,10;


ale przy bazie 30 000 tagów, 100 000 powiązań, 30 000 artykułów oba zapytanie wykonują się ponad 3 sekundy
wookieb
Zmienić silnik wyszukiwania na Sphinx-a chociażby.
lobopol
Jakbym miał taką możliwość na tym serwerze to czemu nie, ale nie mam :/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.