Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wyszukiwanie pełnotekstowe
di@blo
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 9.03.2005

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


Mam zapytanie pełnotekstowe jednak nic nie zwraca

  1. .
  2. mysql_query("SELECT * FROM sprzet WHERE match(nazwa, opis, firma) against('$szuk') ") OR die(mysql_error());
  3. .


Powie mi ktos czy jest to dobrze zbudowane? pierwszy raz uzywam wyszukiwania pełnotekstowego wiec nie wiem czy dobrze sie do tego zabieram. Chce przeszukac 3 pola (nazwa, opis, firma) w bazie pod katem jednego slowa

i tak przy okazji co zrobic by przy wyswietlaniu wynikow z bazy wyswietal mi alfabetycznie ale z uwzglednieniem polski znakow bo teraz a mi znaki a;cznie ale znaki polskie sa po "z"

z gory dzieki

Ten post edytował di@blo 24.04.2008, 15:52:38
Go to the top of the page
+Quote Post
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


składnia jest właściwa.
czy tabela `sprzet` jest typu MyISAM ?
czy na kolumnach `nazwa`, `opis`, `firma` msz założony index FULLTEXT ?

a co do sortowania ... jakie porównywanie (collation) masz dla bazy / tabeli / pola po którym sortujesz? jakie masz kodowanie ogonków w bazie ?


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
di@blo
post
Post #3





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 9.03.2005

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


Baza typu MyISAM
index FULLTEXT tez jest

metody porownywania napisow to latin2_general_ci
a co do kodowania ogonkow to nie wiem jakie i jak to sprawdzic
Go to the top of the page
+Quote Post
nevt
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


wstaw przed mysql_query
  1. <?php
  2. $sql = "SELECT * FROM sprzet WHERE match(nazwa, opis, firma) against('$szuk') ";
  3. echo $sql;
  4. ?>

i pokaż mi co się wyświetla ...

a co do kodowania - skoro dane z bazy poprawnie wyświetlają się na jakiejś stronce, to znaczy że są w takim samym kodowaniu jak ta stronka - sprawdź nagłowki i daj znać ...


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
di@blo
post
Post #5





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 9.03.2005

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


wyswietla sie SELECT * FROM sprzet WHERE match(nazwa, opis, firma) against('dobry')
a swoja droga fajna sztuczka Przyda sie smile.gif

mi nie chodzi o wyswietlanie polskich znakow tylko o to zeby przy sortowaniu np "ł" bylo po "l" a nie po "z" chyba ze to ma jakis zwiazek

Ten post edytował di@blo 24.04.2008, 18:35:21
Go to the top of the page
+Quote Post
nevt
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


na pewno w tych polach masz wpis ze słowem dobry questionmark.gif
pokaż strukture tej tabeli, tzn. rezultat:
  1. SHOW CREATE TABLE sprzet


co do drugiego - skoro widzisz, że źle ci sortuje - to znaczy że jakoś to wyświetlasz. to weź w tym okienku "pogląd źródła" i popatrz w nagłówkach HTML jakie jest kodowanie stronki i będziesz wiedział jak kodowane są dane w bazie... a żeby ci pomóc z sortowaniem musze wiedzieć jak są kodowane dane ...


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
di@blo
post
Post #7





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 9.03.2005

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


Słowo 'dobry' napewno jest w bazie. jak wyszukuje nazwa LIKE $szuk to ladnie znajduje a po wyszukiwaniu pelnotekstowym juz nie

CREATE TABLE `sprzet` (
`id` int(11) NOT NULL auto_increment,
`nazwa` varchar(40) NOT NULL,
`kategoria` int(2) NOT NULL default '0',
`podkategoria` int(11) default '0',
`cena` float(6,2) NOT NULL default '0.00',
`kolor` text,
`rozmiar` text,
`firma` text,
`wypozyczalnia` int(11) NOT NULL default '0',
`opis` text,
`foto` text,
`ilosc` int(3) NOT NULL default '0',
`stan` int(3) unsigned zerofill default NULL,
KEY `id` (`id`),
FULLTEXT KEY `search` (`nazwa`,`opis`,`firma`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin2

charset=ISO-8859-2

// Dodaj bbcode.
// ~webdicepl
Go to the top of the page
+Quote Post
phpion
post
Post #8





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Kiedyś czytałem na mysql.com, że przy niewielkiej ilości rekordów wyszukiwanie pełnotekstowe nie zwraca oczekiwanych wyników (konkretnie nie zwraca nic). Nie będę teraz tłumaczył dlaczego bo po prostu nie pamiętam, a głupot nie chcę pisać. Nie jestem w stanie teraz podać konrketnego źródła, ale również miałem taki problem jak Ty i szukałem pomocy.

// Edit:
http://forumphp.nq.pl/index.php?showtopic=48504
tutaj miałem problem, z krótkimi wyrazami. Nie pamiętam czy w końcu go rozwiązałem czy nie, ale może to będzie przyczyną. 'dobry' ma 5 znaków więc może w tym leży problem.

Ten post edytował phpion 24.04.2008, 19:32:13
Go to the top of the page
+Quote Post
di@blo
post
Post #9





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 9.03.2005

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


Tez sie nad tym zastanawialem ale przy 12 znakach to samo
Go to the top of the page
+Quote Post
MMPrime
post
Post #10





Grupa: Zarejestrowani
Postów: 79
Pomógł: 12
Dołączył: 23.04.2008

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


Podaj także dane jakie występują w tej bazie.
Słowo dobre nie może być zbyt popularne też by zostało znalezione.
Jak i słowo szukane nie może być mniejsze jak 4 znaki(zależnie od ustawień MySQL)


--------------------
Go to the top of the page
+Quote Post
phpion
post
Post #11





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(MMPrime @ 24.04.2008, 20:46:06 ) *
...
Słowo dobre nie może być zbyt popularne też by zostało znalezione.
...

Możliwe, że właśnie o to chodziło. Przy małej liczbie rekordów występowanie danego słowa będzie procentowo większe, niż przy wiekszej liczbie rekordów.
Go to the top of the page
+Quote Post
di@blo
post
Post #12





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 9.03.2005

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


calosc jest dopiero w budowie dlatego narazie jest tylko 1 rekord ktory dodalem dla celow testowych
W polu nazwa mam 'lyzwy' w polu opis 'dobry sprzet do lyzwiarstwa figurowego' a w polu firma nie ma nic zawartosci pozostaych chyba jest nieistotna wiec nie podaje
Go to the top of the page
+Quote Post
nevt
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


a spróbuj wprowadzić coś do pola `firma` ... nie jestem pewien, ale możliwe, że gdy w indeksie założonym na kilku polach nie ma wszystkich danych, to dany wiersz nie zostaje w ogóle zindeksowany (w normalnych jednopolowych indeksach też nie ma informacji o pustych - NULL - polach)


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
artega
post
Post #14





Grupa: Zarejestrowani
Postów: 174
Pomógł: 42
Dołączył: 22.07.2007
Skąd: /dev/random

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


Słowa w polach z indeksem FULLTEXT są indeksowane jeżeli spełniają minimalną i maksymalną długość oraz nie znajdują się domyślnie na tej liście. Jeżeli z jakiś względów nie pasuje nam domyślna wartość ft_min_word_len lub ft_max_word_len (długość znaków) można dodać do pliku my.ini
Kod
[mysqld]
ft_min_word_len = 3
ft_max_word_len = 10

Po takich zmianach reset serwera jest konieczny a indeks musi zostać "odświeżony".
  1. REPAIR TABLE tablica QUICK

Słowa, które są popularne w wierszach zostaną zignorowane nawet jeżeli spełniają wymagane kryteria.
Cytat
i tak przy okazji co zrobic by przy wyswietlaniu wynikow z bazy wyswietal mi alfabetycznie ale z uwzglednieniem polski znakow bo teraz a mi znaki a;cznie ale znaki polskie sa po "z"

Upewnij się, że character_set_database i collation_database za pomocą zapytania
  1. SHOW VARIABLES LIKE '%database%'

są ustatione odpowiednio na latin2, latin2_general_ci
Go to the top of the page
+Quote Post
Hacker
post
Post #15





Grupa: Zarejestrowani
Postów: 225
Pomógł: 0
Dołączył: 1.11.2005

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


Cytat
MySQL does not index any words less than or equal to 3 characters in length, nor does it index any words that appear in more than 50% of the rows. This means that if your table contains 2 or less rows, a search on a FULLTEXT index will never return anything.


Dodaj jeszcze kilka rekordow i powinno zadziałać ;]

Ten post edytował Hacker 27.04.2008, 22:13:22


--------------------
(\.../)This is Bunny
(O.o)Copy Bunny into your signature to help him...
(> <)...on his way to world domination
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 Aktualny czas: 22.08.2025 - 03:27