![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) ![]() ![]() |
Witam serdecznie,
Mam problem z wyszukiwarką... Chcę zrobić wyszukiwarkę która szuka zamiennie słowa (przykładowo wpisując "auto myjnia" i "myjnia auto" ma zwracać takie same wyniki) oraz w momencie gdy ktoś użyje (lub nie użyje) polskich znaków przykładowo "łożysko" oraz "lożysko" - żeby wyświetlała wyniki z obu fraz... kombinuję z takim kodem:
ale nie bardzo chce działać (IMG:style_emoticons/default/sad.gif) Macie może pomysł co mam źle w tym kodzie? Z góry dziękuje za pomoc, Northwest Ten post edytował northwest 11.10.2012, 11:15:28 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 511 Pomógł: 143 Dołączył: 13.03.2010 Skąd: Jasło Ostrzeżenie: (0%) ![]() ![]() |
1. Nie powinno się używać do takich celów like, bo bardzo szybko przestanie się to skalować. Lepiej używać Sphinx albo zaimplementować własną wyszukiwarkę pełną tekstową np. tak jak w phpbb3
2. czy zamiast or bf_id nie powinna być nazwa 3. używasz zmiennej $pet jednak nie masz jej zdefiniowanej (definicja jest zaakomentowana) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) ![]() ![]() |
1. dlaczego nie? prostej wyszukiwarce nie podoła like?
2. bf_id = numer seryjny 3. fakt, przeoczyłem wklejająć na forum - poprawiłem (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
1: to, że ona jest prosta wg Ciebie, to nie znaczy, że wyciśnie siódme poty w przypadku, gdy tych danych przybędzie, obciążenie wzrośnie.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Jeśli w bazie masz łożysko (czy to strona o ginekologii?), a chcesz żeby wyszukało także wpisanie w wyszukiwarce lozysko, to newralgiczne znaki zastąp znakiem podkreślenia i dopiero szukaj, to prostsze niż się bawić w zamiany. Czyli szukana fraza: _o_ysko. Poza tym gdzie jest główna część zapytania? Bo tu tylko się od AND zaczyna.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) ![]() ![]() |
a moglbym prosic o informacje jak to ma wygladac? danych mam ok 500mb
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Jeśli w bazie masz łożysko (czy to strona o ginekologii?) (IMG:style_emoticons/default/biggrin.gif) dobre dobre (IMG:style_emoticons/default/smile.gif) Jeśli w bazie masz łożysko (czy to strona o ginekologii?), a chcesz żeby wyszukało także wpisanie w wyszukiwarce lozysko, to newralgiczne znaki zastąp znakiem podkreślenia i dopiero szukaj, to prostsze niż się bawić w zamiany. Czyli szukana fraza: _o_ysko. Poza tym gdzie jest główna część zapytania? Bo tu tylko się od AND zaczyna. Do wzorca _o_ysko pasują także nożysko, kołysko, morysko (nie jestem taki mądry, tu znalazłem).
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) ![]() ![]() |
łożysko może być także w rowerze, samochodzie itp (IMG:style_emoticons/default/wink.gif)
całe zapytanie wygląda tak: SELECT * FROM produkty WHERE enable = '1' AND (nazwa LIKE '%chłodnica%' or bf_id LIKE '%chłodnica%') AND (nazwa LIKE '%chlodnica%' or bf_id LIKE '%chlodnica%') AND (nazwa LIKE '%chłodnica%' or bf_id LIKE '%chłodnica%') AND (nazwa LIKE '%chlodnica%' or bf_id LIKE '%chlodnica%') ORDER by nazwa ASC (przykładowo) dokładnie , jak ktoś wpisze "łożysko" - chce szukać jako "łożysko" i "lożysko"... (IMG:style_emoticons/default/smile.gif) Kodowanie strony mam w UTF8, kodowanie bazy w: utf8_unicode_ci czyli zapytanie ma wyglądać następująco: LIKE REGEXP 'łożysko|lożysko|' (IMG:style_emoticons/default/questionmark.gif) coś takiego: (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
I tak będzie jeździć po bazie.
Jeśli chcesz tak szczegółowo wyszukiwać, to stwórz lepiej jakiś słownik wyrazów i odpowiednio go połącz. Proponowałbym tu Sphinx, etc. PS. Po co się tak pitolić z polskimi znakami, skoro można transliterować na łacińskie odpowiedniki i wtedy może baza zajmie 2x więcej, ale będzie zasuwać z wyszukiwaniem. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) ![]() ![]() |
tzn. baza już działa, nie mogę jej zmienić (IMG:style_emoticons/default/sad.gif)
chciałbym zrobić to najbardziej optymalnie na tym co jest .... |
|
|
-north- |
![]()
Post
#11
|
Goście ![]() |
kombinuje z takim fulltext searchem:
SELECT * FROM produkty WHERE enable = '1' and MATCH(nazwa) AGAINST (' "fiat chłodnica" ') i skrypt mi wyrzuca wszystkie frazy które mają frazę w nazwie "fiat" lub "chłodnica" - da się ustawić to tak, żeby zwracało tylko takie rekordy które mają obie frazy jednocześnie? |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 7 Dołączył: 3.08.2007 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
a na moje oko to zapytanie, które napisałeś nie zadziała ... dlaczego ?
w powyższym zapytaniu szukasz informacji o produktach które mają nazwę lub ID "chłodnica" i "chlodnica' jednocześnie, poza tym masz bez sensu powtórzone dwa razy te same AND'y wywal ostatnie dwa AND'y i zamiast AND pomiędzy pozostałymi AND'ami daj OR i powinno ruszyć pisane w pracy na szybko więc nie gwarantuję 100% działania (IMG:style_emoticons/default/tongue.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 14:24 |