Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Pełnotekstowe wyszukiwanie
kosior11
post
Post #1





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.03.2011

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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 +/- (IMG:style_emoticons/default/wink.gif) Poczytaj o tym najlepiej tu

Ten post edytował Sephirus 21.01.2013, 14:05:59
Go to the top of the page
+Quote Post
kosior11
post
Post #3





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.03.2011

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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)
Go to the top of the page
+Quote Post
Sephirus
post
Post #5





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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)';
Go to the top of the page
+Quote Post
kosior11
post
Post #6





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.03.2011

Ostrzeżenie: (10%)
X----


Dzięki Panowie!
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 18.09.2025 - 10:36