Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zaawansowana wyszukiwarka
tomaszh
post 16.07.2004, 13:56:11
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Szczecin

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


Stworzenie prostej wyszukiwarki opartej na Mysql wraz z porcjowaniem zapytań z pewnoœciš nie sprawia żadnego problemu. Problem pojawia się gdy chcem stworzyć wyszukiwarkę z mechanizmem podobnym do wyszukiwarki google. A konkretnie o sortowanie wyników według trafnoœci wyszukiwania. Gdy mamy dla przykładu bazę:
1: warszawa, stolica, polska, unia
2: polska, ue, unia
3: poznan, krakow, szczecin, ue
Gdy wyszukujemy słowa (polska, ue, unia), jako pierwsze powinno pokazac sie 2,1,3. Po rozbiciu frazy na słowa, sam kod jest kombinacjš tych słów:
  1. <?php
  2. $kat1=&#092;"SELECT * from baza WHERE fraza LIKE %$a% AND fraza LIKE %$b% AND fraza LIKE %$c%\"
  3. $kat2=&#092;"SELECT * from baza WHERE fraza LIKE %$a% AND fraza LIKE %$c% AND fraza LIKE %$b%\"
  4. $kat3=&#092;"SELECT * from baza WHERE fraza LIKE %$b% OR fraza LIKE %$a% AND fraza LIKE %$c%\"
  5. $kat4=&#092;"SELECT * from baza WHERE fraza LIKE %$b% AND fraza LIKE %$c% AND fraza LIKE %$a%\"
  6. $kat5=&#092;"SELECT * from baza WHERE fraza LIKE %$c% AND fraza LIKE %$b% AND fraza LIKE %$a%\"
  7. $kat5=&#092;"SELECT * from baza WHERE fraza LIKE %$c% AND fraza LIKE %$a% AND fraza LIKE %$b%\"
  8.  
  9. ?>

W ten sposób powstało mi 5 poleceń i wystarczy pokazać rekordy które odpowiadajš $kat1, $kat2, $ka3,... . Czy jest jakiœ inny sposób na stworzenie wyszukiwarki która zwróci rekordy według trafnoœci. Z 3 słowami można sobie jeszcze poradzić, ale gdy użytkownik wpisze np. 5 słów do wyszukania to kombinacja tych słów stworzy sporš liczbę poleceń SQL.


--------------------
giełda szczecin
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
stach
post 17.07.2004, 06:49:32
Post #2





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 15.02.2003
Skąd: Ziemia

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


jest takie zapytanie SQL
MATCH .... AGAINST
coprawda nie jest doskonale bo jesli pytana fraza znajduje sie w wiecej niz 50% rzedow pytanej columny zwraca 0.


--------------------
Warsztat: IIS 6.0 | PHP 4.3.10 && 5.0.3 | MySQL 4.1.9 | Smarty 2.6.7 | PEAR | EditPlus 2
Produkcja: FlipTiM
Go to the top of the page
+Quote Post
akubiczek
post 17.07.2004, 07:22:09
Post #3





Grupa: Zarejestrowani
Postów: 189
Pomógł: 0
Dołączył: 4.07.2004
Skąd: z neostrady

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


Zastosuj wagi w zapytaniu, i wynik sortuj na podstawie tych wag. Ma to jeszcze tą zaletę, że możesz na przykład dać wyższą wagę dla tytuły dokumenty, a niższą np. do jego treści. I w ten sposób w jednym zapytaniu SQL stworzysz zaawansowaną wyszukiwarkę z sortowaniem wyników:

  1. ELECT DISTINCT ID, (((Title LIKE '%forum%' OR Title LIKE '%FORUM%') AND (Title LIKE '%php%' OR Title LIKE '%php%'))*8)+(((Contents LIKE '%forum%' OR Contents LIKE '%FORUM%') AND (Contents LIKE '%php%' OR Contents LIKE '%php%'))*4)+(((Title LIKE '%forum%' OR Title LIKE '%FORUM%') OR (Title LIKE '%php%' OR Title LIKE '%php%'))*2)+(((Contents LIKE '%forum%' OR Contents LIKE '%FORUM%') OR (Contents LIKE '%php%' OR Contents LIKE '%php%'))*1) AS W FROM _dDoc WHERE ((Title LIKE '%forum%' OR Title LIKE '%FORUM%') OR (Title LIKE '%php%' OR Title LIKE '%php%') OR (Contents LIKE '%forum%' OR Contents LIKE '%FORUM%') OR (Contents LIKE '%php%' OR Contents LIKE '%php%')) HAVING W>0 ORDER BY W DESC


Jak się przez ten przykład przegryziesz to wszystko będzie jasne. Szukaliśmy słów "forum php" w polach Title i Contents (Title ma wyższą wagę)


--------------------
pozdrawiam, Adam Kubiczek
kubiczek.eu
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: 19.07.2025 - 13:03