Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Pełnotekstowe wyszukiwanie
kosior11
post 21.01.2013, 13:52:29
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 21.01.2013, 14:04:09
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 +/- wink.gif Poczytaj o tym najlepiej tu

Ten post edytował Sephirus 21.01.2013, 14:05:59


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
kosior11
post 21.01.2013, 14:30:29
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 21.01.2013, 14:34:03
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)


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Sephirus
post 21.01.2013, 14:34:15
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)';


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
kosior11
post 21.01.2013, 14:57:08
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.06.2025 - 02:16