Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Wyszukiwanie pełnotekstowe?, Czy może mi to ktoś łopatologicznie wytłumaczyć ?
xajart
post 30.09.2009, 12:23:06
Post #1





Grupa: Zarejestrowani
Postów: 141
Pomógł: 1
Dołączył: 2.12.2008

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


Witam. 

Siedzę już od ponad 3 godzin i grzebię w tym necie w poszukiwniu jak zrobić by w bazie danych wyszukiwać zadanych fragmentów tekstu (przez wyszukiwarkę).

Wyczytałem o przeszukiwaniu pełnotekstowym za pomocą MATCH AGAINST, nawet dokumentacje do tego znalazłem na Fultext search ale szczerze powiedziawszy dalej kompletnie nie wiem o co z tym chodzi. Pytanie sformułować jest nie problem tylko nie wiem co mam zrobić by FULLTEXT dodać do tablicy w MySQL. Piszą tam że od wersji 4 jest to standardowo dostępne, i mimo ze mam nową wersję MySQL to jakoś nie mogę tego nigdzie znaleźć. 

Poza tym wyczytałem też gdzieś, że są jakieś problemy z używaniem tego odnośnie ilości trafień itp (że nie można tych kryteriów zmienić).

Może napisze do czego jest mi to potrzebne: mam zrobioną wyszukiwarkę produktów, w której użytkownik poza wpisaną frazą (tekstem) wybiera 3 opcje z list rozwijalnych, dotego 2 opcje są ukryte w formularzu - okreslajace rodzaj i typ produktu. Chce zbudować wyszukiwarkę za pomocą której poprzez odpowiednio sformułowane zapytanie do BD uzyskam odpowiednie wyniki. Wiem że można używac MATCH AGAINST kilka razy w zapytaniu odnośnie różnych kolumn i tekstów wyszukiwania. Problem jest w tym, że nie wiem jak się za to zabrać, a angielki u mnie jest na słabym poziomie.

Byłbym bardzo wdzięczny jak by mi to ktoś wytłumaczył. Bo mogę to rozwiązać pobierając odpowiednią ilość rekordów a potem kontrolujac je za pomocą eregów czy zawiera odpowiedni wpis jak tak to wyświetl. Ale to po pierwsze zajmie sporo kodu a po drugie skoro można to łatwiej rozwiązać to nie chce mi się na około tego kodu klepać.


Go to the top of the page
+Quote Post
potreb
post 30.09.2009, 13:02:53
Post #2





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Tutaj http://www.php.rk.edu.pl/w/p/pelnotekstowe-wyszukiwanie/ masz opisane mniej więcej o wyszukiwaniu pełnotekstowym. Używam sam wyszukiwania pełnotekstowego ale dla zawartości strony.


--------------------

Go to the top of the page
+Quote Post
bigZbig
post 30.09.2009, 14:54:06
Post #3





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Polecam http://devzone.zend.com/article/1304


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
CyberDuck_
post 30.09.2009, 15:23:08
Post #4





Grupa: Zarejestrowani
Postów: 135
Pomógł: 15
Dołączył: 17.08.2009

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


Sprobuj z LIKE , NP:
  1. $result = mysql_query("SELECT id, produkt FROM towary LIKE '%$fraza' ORDER BY data_dodania DESC");
  2. while(list($id, $login) = mysql_fetch_row($result)) {
  3. echo "$id - $produkt <br>";
  4. }

Przy czym znak % okreska z ktorej strony moze stac dowolny
ciag znakow. Czyli jesli masz powiedzmy w bazie 'kakao' i uzyjesz :
'%kao', 'ka%' to bedzie zawsze prawdziwe. Jesli dasz bez % to
wyszuka Ci konkretna fraze.

Ten post edytował CyberDuck_ 30.09.2009, 15:23:25
Go to the top of the page
+Quote Post
Riklaunim
post 30.09.2009, 17:46:31
Post #5





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

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


Cytat(CyberDuck_ @ 30.09.2009, 16:23:08 ) *
Sprobuj z LIKE , NP:
  1. $result = mysql_query("SELECT id, produkt FROM towary LIKE '%$fraza' ORDER BY data_dodania DESC");
  2. while(list($id, $login) = mysql_fetch_row($result)) {
  3. echo "$id - $produkt <br>";
  4. }

Przy czym znak % okreska z ktorej strony moze stac dowolny
ciag znakow. Czyli jesli masz powiedzmy w bazie 'kakao' i uzyjesz :
'%kao', 'ka%' to bedzie zawsze prawdziwe. Jesli dasz bez % to
wyszuka Ci konkretna fraze.


LIKE nie jest wyszukiwaniem pełnotekstowym, ani nie skaluje się - przy dużej ilości rekordów będzie wykonywane bardzo długo.

Co do wyszukiwania w MySQL to można zastosować pełnotekstowego silnika dla tabel MyISAM, lecz lepszym rozwiązaniem będzie podpięcie Sphinxa - http://www.sphinxsearch.com/ - jeżeli ten sklep ma być jakimś większym i nastawionym na wysoką jakość winksmiley.jpg


--------------------
Biblioteki: Skrypty, CMS | Kurs PHP | Python
Go to the top of the page
+Quote Post
xajart
post 30.09.2009, 18:09:38
Post #6





Grupa: Zarejestrowani
Postów: 141
Pomógł: 1
Dołączył: 2.12.2008

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


Na dzisiaj chyba już sobie dam siana, bo z tym wyszukiwaniem pełnotekstowym mi to nie działa i od strony SQL też wywala błędy mimo że dodałem to FULLTEXT i robiłem dokładnie tak jak w opisie na stronce podanej przez potreb.

Jutro może poptarze co to jest ten Sphinx winksmiley.jpg - ale z tego co luknełem na stronkę - to mi się wydaje czy to jest na drupal'a questionmark.gif

Ten post edytował xajart 30.09.2009, 18:11:54
Go to the top of the page
+Quote Post
CyberDuck_
post 30.09.2009, 18:11:38
Post #7





Grupa: Zarejestrowani
Postów: 135
Pomógł: 15
Dołączył: 17.08.2009

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


Ile to jest dla Ciebie duzo ? 100 tys rekordow ? z baza 300 MB ?
Tyle to jest dla Ciebie duzo ? No to ja mam tyle i stosuje LIKE
i trwa chwilke. Wlasciwie to od razu pokazuja sie rekordy, ale
oczywiscie mozesz sobie doinstalowywac kupe skryptow zeby
cos osiagnac, a po przeniesieniu na inny serwer zobaczyc fige
admina, ktory sie w koncu zbuntuje biggrin.gif
Go to the top of the page
+Quote Post
xajart
post 30.09.2009, 21:49:24
Post #8





Grupa: Zarejestrowani
Postów: 141
Pomógł: 1
Dołączył: 2.12.2008

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


Puki co zrobiłem to na LIKE, bo z tym przeszukiwaniem pełnotekstowym coś mi to nie działa i za dużo czasu mi zajmuje dochodzenie w czym tkwi problem, kiedyś może to rozgryze.

Dziękuje wszystkim za przydatne rady i pomoc w temacie, wdzięczny byłbym jeszcze jak by ktoś mógłby podać mi jakiś przykład z tym wyszukiwaniem pełnotekstowym, który bym mógł sobie sprawdzić czy pójdzie a jak nie to rozgryźć dlaczego to nie działa u mnie.

Go to the top of the page
+Quote Post
piotrooo89
post 1.10.2009, 07:09:48
Post #9


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




a zapytam tak czysto teoretycznie ustawiłeś kolumnę w tabeli na wyszukiwane pełnotekstowe?


--------------------
Go to the top of the page
+Quote Post
Riklaunim
post 1.10.2009, 10:54:36
Post #10





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

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


Cytat(xajart @ 30.09.2009, 19:09:38 ) *
Jutro może poptarze co to jest ten Sphinx winksmiley.jpg - ale z tego co luknełem na stronkę - to mi się wydaje czy to jest na drupal'a questionmark.gif

Sphinx to "aplikacja" działająca obok baz danych służąca właśnie do indeksowania zawartości tabel i wyszukiwania w zaindeksowanych danych, czy też wykonywania złożonych zapytań winksmiley.jpg Niestety na hostingach współdzielonych generalnie nie ma dostępu do tego narzędzia.

Cytat(CyberDuck_ @ 30.09.2009, 19:11:38 ) *
Ile to jest dla Ciebie duzo ? 100 tys rekordow ? z baza 300 MB ?
Tyle to jest dla Ciebie duzo ? No to ja mam tyle i stosuje LIKE
i trwa chwilke. Wlasciwie to od razu pokazuja sie rekordy, ale
oczywiscie mozesz sobie doinstalowywac kupe skryptow zeby
cos osiagnac, a po przeniesieniu na inny serwer zobaczyc fige
admina, ktory sie w koncu zbuntuje biggrin.gif

A wiesz co to Sphinx? Bo skryptem to on nie jest. Pytanie też jak stosujesz to LIKE - czy z czy bez wildcardu na początku wyrażenia (a ma to spore znaczenie na wydajność zapytania) i jak bardzo baza jest obciążona pozostałym ruchem? W przypadku wyszukiwarki produktów - w sklepie internetowym - musi działać to szybko i efektywnie przy częstym użytkowaniu winksmiley.jpg
A Sphinxa już stosowałem np. w GL, gdzie jak masz np. 1500 osób online to "wyszukiwanie" z LIKE + parę innych warunków by nie przeszło (a postów, czy użytkowników jest w bazie bardzo dużo)


--------------------
Biblioteki: Skrypty, CMS | Kurs PHP | Python
Go to the top of the page
+Quote Post
bigZbig
post 13.10.2009, 17:15:21
Post #11





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


~Riklaunim - na podstawie tego co przeczytałem w artykule Pełnotekstowe wyszukiwanie w PHP z wykorzystaniem Sphinxa nie mogę się z Tobą w pełni zgodzić. Okazuje się, że sphinxa można użyć oczywiście w wersji binarne wymagającej praw root-a, ale mamy też do dyspozycji php-ową bibliotekę realizującą te same zadania co binarne rozszerzenie. Zamierzam to wkrótce przetestować.


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
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: 28.04.2024 - 08:12