Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pełnotekstowe wyszukiwanie
Forum PHP.pl > Forum > Przedszkole
kosior11
Witam,

do wyszukiwania treści używam metody MATCH AGAINST, metoda ta wyświetla wyniki według trafności (najpierw te najbardziej trafione później mniej itp.). Moje pytanie brzmi czy można ograniczyć wyniki wyszukiwania w tym przypadku wyłącznie do tych najbardziej trafnych, bo np. gdy wpisuje w pole wyszukiwania frazy: "kategoria lokalizacja" to wyszukuje mi najpierw wyniki w których znajdują się obie frazy -czyli to pożądane, a później wszystkie wyniki z kategorii i wszystkie wyniki z lokalizacji a ja chciałbym pominąć te dwa ostatnie rozwiązania.

Pozdrawiam
Sephirus
Wystarczy zastosować Boolean mode:

  1. SELECT costam FROM tabela WHERE MATCH(pole1,pole2) AGAINST('+kategoria +lokalizacja' IN BOOLEAN MODE)


dzięki temu możesz używać operatorów +/- wink.gif Poczytaj o tym najlepiej tu
kosior11
Dzięki, tylko u mnie to roche inaczej wygląda bo mam tak skonstruwoany kod:

  1. SELECT * FROM tabela WHERE MATCH (kat1, kat2, kat3, kat4 ...katn) AGAINST ('+".$_GET['keyword_tag']."' IN BOOLEAN MODE)


i niestety nie wiem jak mógłbym odseparować słowa gdy jest ich kilka wpisanych, a w tym przypadku BOOLEAN MODE działa tylko do pierwszego słowa
b4rt3kk
Słowa możesz odseparować, choćby w ten sposób (jeśli są oddzielone spacją):

  1. SELECT * FROM tabela WHERE MATCH (kat1, kat2, kat3, kat4 ...katn) AGAINST ('+".strreplace(' ', ' +', $_GET['keyword_tag'])."' IN BOOLEAN MODE)
Sephirus
Tak BTW pomyśl o SQL-Injection...

  1. $search = $_GET['keyword_tag']; // tu dokładnie pomyśl o tym :)
  2. $search = preg_replace('#\s{2,}#s',' ',trim($search));
  3.  
  4. $sql = 'SELECT * FROM tabela WHERE MATCH (kat1, kat2, kat3, kat4 ...katn) AGAINST ("';
  5.  
  6. $sql.= '+'.implode(' +',explode(' ',$search));
  7.  
  8. $sql.= '" IN BOOLEAN MODE)';
kosior11
Dzięki Panowie!
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.