konto usunięte

Temat: Wyszukiwarka w PHP

Witam serdecznie,
Mam taką bazę danych:

CREATE TABLE IF NOT EXISTS `produkty` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`promotion` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8


zrobiłem sobie wyszukiwarkę która wyszukuje mi produkty:

$tablicaA = $ms->query_select("SELECT * FROM produkty WHERE name like '%".$szukanafraza."%' ORDER by name ASC;");
foreach ($tablicaA as $wynA => $warttA) {
....
....
}

(kod w uproszczeniu)

Problem w tym że po wpisaniu nazwy produktu idealnie pasującej zapisowi w bazie wszystko wyszukuje poprawnie, ale w przypadku np. wpisania 2 wyrazów z 3, albo nazwy w innej kolejności ("drzwi przednie" zamiast "przednie drzwi") skrypt nic nie wyszukuje :( Wie ktoś może jak to łatwo przerobić żeby wyszukiwał?

Z góry dziękuje za pomoc,
Łukasz
Michał Sznurawa

Michał Sznurawa Scala Developer

Temat: Wyszukiwarka w PHP

Jak masz mala baze produktow to zamien spacje na % co Ci da oczekiwany rezultat.
$szukanafraza = str_replace(' ', '%', $szukanafraza);


Z tym ze ja rowniez proponuje szukanie przez MATCH() AGAINST(). Jest szybsze, wydajniejsze, dokladniejsze i w trybie BOOLEAN MODE obsluguje operatory.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Wyszukiwarka w PHP

Ja wyszukiwanie pełnotekstowe ostatnio robiłem za pomocą Zend_Lucene i muszę przyznać, że znakomicie się spisuje. Przy okazji nie używa w ogóle bazy danych :)

konto usunięte

Temat: Wyszukiwarka w PHP

Jest jeszcze Sphinx. W wielu rankingach przoduje jeśli chodzi o szybkość odpowiedzi na kwerendy.
Maciej Marczuk

Maciej Marczuk Software Engineer

Temat: Wyszukiwarka w PHP

Jak masz baze do circa 100k rekordow to tez polecam Zend_Lucene - jest prosty, w zupelnosci daje rade do takich zastosowan i co najwazniejsze odpalisz go bez wiekszych problemow na hostingu.
W wiekszych zbiorach zaczynaja sie problemy z indeksowaniem (predkosc, bledy w samym indeksie) i samym wyszukiwaniem (wildcardy i "fuzzysearches" staja sie praktycznie bezuzyteczne bo maja za dlugie czasy wyszukiwania). Niedawno indeksowalem baze kilka milionow rekordow to samo indeksowanie trwalo ponad 24h + kilka godzin optymalizacji.

Jakby ktos sie interesowal tematem to polecam solra (taka rozbudowana Lucene, tez od apache) i nasze polskie zasoby na jego temat:
http://solr.pl/
Bylem bardzo milo zaskoczony jak znalazlem duzo fajnych materialow autorstwa naszego rodaka :)
nawet ksiazke wydaje niedlugo:
http://www.amazon.com/Solr-3-1-Cookbook-Rafa-Ku/dp/184...

pozdr.
Tomasz Zadora

Tomasz Zadora programuję

Temat: Wyszukiwarka w PHP

Domyślam się, że polecasz Solra ponieważ radzi sobie dobrze z milionami rekordów ? Jakieś inne powody ?Tomasz Zadora edytował(a) ten post dnia 15.06.11 o godzinie 10:49

Temat: Wyszukiwarka w PHP

Tomasz Zadora:
Domyślam się, że polecasz Solra ponieważ radzi sobie dobrze z milionami rekordów ? Jakieś inne powody ?

Sam właśnie jestem w trakcie integracji SOLR`a z systemem TYPO3.

Co mi się w nim podoba ?
- prostota konfiguracji
- elastyczność
- możliwość bardzo dokładnego dostosowania algorytmu wyszukiwania do potrzeb
- bardzo dobre działanie (na razie spełnia 100% pokładanych w nim nadziei)
- wsparcie polskiej fleksji
- bardzo dobra konfiguracja defaultowa. Wiele rzeczy działa bardzo dobrze (nie bez zarzutu, ale bardzo dobrze) przy domyślnych ustawieniach
Maciej Marczuk

Maciej Marczuk Software Engineer

Temat: Wyszukiwarka w PHP

Tomasz Zadora:
Domyślam się, że polecasz Solra ponieważ radzi sobie dobrze z milionami rekordów ? Jakieś inne powody ?

Dawid juz widze odpowiedzial ;) dorzuce:
- Dziala jak rakieta (nawet bez memcache mozna sie spokojnie obejsc), fajny cache, multum mozliwosci konfiguracyjnych indeksu.
- Ma bardzo przyjemne api json/xml/php/phps co kto lubi, masz nawet rozszerzenie do php: http://pl2.php.net/manual/en/book.solr.php
- Dataimporter mozesz zmiescic w xmlu ktory ma pare linijek
- Momentalne indeksowanie co nawet przy mniejszych bazach jest wygodne zeby sobie przeliczac index co jakis czas (jest tez wzglednie latwe do ogarniecia importowanie przyrostowe synchronizowane z db). Przydaje sie jak masz dynamicznie zmieniajace sie dane.
- wsparcie dla clusteringu (niedlugo sie pewnie przyda)
- wzglednie niski prog wejscia jezeli chodzi o wdrozenie (pamietam ze kiedys z poczatkowymi wersjami Lucene nie bylo tak rozowo)
- community

Ma tez co prawda pare upierdliwych cech (np. case sensitivity wildcard searches) ale to drobiazgi raczej i w sumie jak ktos chce to latwo obejdzie. Faceted search (sorry ale nie wiem jak to przetlumaczyc) tez jest troche wolniejszy niz myslalem ale to juz taki jego urok (jakby ktos mial doswiadczenia z bobo albo innymi nakladkami na lucene to chetnie poslucham ;))
No i potrzebuje tej maszyny oczywiscie co czyni go niestety niedostepnym dla mniejszych "hostingowych" projektow.

pozdr.

Temat: Wyszukiwarka w PHP

Jak już o wadach mowa to trzeba się trochę napocić żeby bloba zaindeksować :)

Następna dyskusja:

Narzędzia do PHP




Wyślij zaproszenie do