Skocz do zawartości

Full text search i niektóre polskie znaki


Tart

Rekomendowane odpowiedzi

Mam małą prośbę do używających w MySQLu z full text searcha. Proszę założyć rekordy z następującymi tekstami:

1. źdźbło rąsnące ściemnia

2. rąsnące źdźbło ściemnia

3. źdźbło

a następnie spróbować wyszukać wyraz źdźbło, jeśli zostaną wyszukane wszystkie trzy rekordy to poproszę o konfigurację oraz wersję MySQLa w jakiej to się stało :D

Gwoli wyjaśnienia, moim problemem nie jest generalnie wyszukiwanie wyrazów z polskimi znakami, tylko niektórych ich kombinacji, a wyraz źdźbło jest takim wyjątkowym dla mnie przykładem. Interesuje mnie głównie wyszukiwanie w ISO, ale może być również UTF-8 (dotyczy to również przechowywania w SQLu).

Odnośnik do komentarza
Udostępnij na innych stronach

Jakim zapytaniem wyszukujesz to słowo w bazie?

Dzięki za zainteresowanie, ale chcę uniknąć teoretycznej dyskusji, zbyt dużo tego już było w innym gronie ;)

Szukam kogoś, komu wyszukanie tego cholernego źdźbła działa prawidłowo.

Zresztą z przyjemnością zobaczę ten wynik również w Postgresie i MSSQLu.

Zakładam, że skoro mi się nie udało, to nie oznacza, że nie jest to możliwe :D

Odnośnik do komentarza
Udostępnij na innych stronach

Więc musisz pokombinować z kodowaniem

A spróbuj wyszukać ĹşdĹşbĹ‚a

No to sprawdzam:

SELECT * FROM test WHERE MATCH(tv) AGAINST('ściemnia')

Wyszukuje dwa rekordy

SELECT * FROM test WHERE MATCH(tv) AGAINST('żdźbło')

ZERO

SELECT * FROM test WHERE MATCH(tv) AGAINST('źdźbła')

ZERO

Jak widać powyżej nie jest to ogólny problem z charsetem ponieważ wyszukuje bez problemu ściemnia tylko ... no właśnie, jestem bezradny i bez pomysłu :D

Odnośnik do komentarza
Udostępnij na innych stronach

Mysql jest dość pokręcony jeżeli chodzi o encoding :D

W tylu miejscach mozna coś ustawić albo zepsuć dlatego czesto są problemy ;)

Mogłeś podac pełny SQL ... create table ... insert into ... select

To ktoś by skopiował wkleił i by sprawdził .

Cudów nie ma musi działać

Odnośnik do komentarza
Udostępnij na innych stronach

Więc musisz pokombinować z kodowaniem

A spróbuj wyszukać ĹşdĹşbĹ‚a

No to sprawdzam:

SELECT * FROM test WHERE MATCH(tv) AGAINST('ściemnia')

Wyszukuje dwa rekordy

SELECT * FROM test WHERE MATCH(tv) AGAINST('żdźbło')

ZERO

SELECT * FROM test WHERE MATCH(tv) AGAINST('źdźbła')

ZERO

Jak widać powyżej nie jest to ogólny problem z charsetem ponieważ wyszukuje bez problemu ściemnia tylko ... no właśnie, jestem bezradny i bez pomysłu :D

Jak dla mnie to własnie 100% dowód na to ze to encoding

Słowa z literą ś działają a z literą ź nie działaja.

Odnośnik do komentarza
Udostępnij na innych stronach

Jak dla mnie to własnie 100% dowód na to ze to encoding

Słowa z literą ś działają a z literą ź nie działaja.

Zrób u siebie ten test i podaj wynik.

ś i ź są z tego samego "miotu" w przeciwieństwie do ę lub ń :D

Jest gorzej ;)

Jeżeli dołożę rekord z tekstem:

ściemnia źdźbło rąsnące

to full text przestaje wyszukiwać wyraz ściemnia, po usunięciu tego rekordu, z powrotem znajduje dwa wystąpienia. Niestety ten patent nie działa na źdźbło

Nie chciałem wcześniej mącić, ale ma znaczenie czy dana polska litera jest na pierwszym miejscu w polu, z tym, że nie dotyczy to wszytkich.

Jak już pisałem, nieprzypadkowo proszę o przetestowanie u siebie, zamiast podejmować teoretyczne rozważania ;).

Odnośnik do komentarza
Udostępnij na innych stronach

Nie mam z tym żadnego problemu.

Jakie kodowanie masz ustawione na stronie podczas wprowadzania tekstu do bazy?

Czy takie samo kodowanie jest na stronie z wyszukiwarką?

Czy może ta baza powstała wcześniej na innej stronie lub serwerze? a teraz została zaadaptowana na nowej stronie?

.

Odnośnik do komentarza
Udostępnij na innych stronach

ja juz napisałem

jak bedzie SQL to przetestuje , tylko niech bedzie z ustawianiem kodowania dla tabeli i kolumn

Bo jak wpisałem z palca SQL bez ustawiania encodingu to tabeli mi sie założyła w jakims dziwnym kodowaniu

po wpisaniu Twojego tekstu zamiast polskich znaków mialem znaki zapytania

Odnośnik do komentarza
Udostępnij na innych stronach

jak bedzie SQL to przetestuje..

Podaję kod tabeli tak jak idzie z phpmyadmina.

CREATE TABLE `test1` (
 `tv` varchar(200) character set utf8 collate utf8_polish_ci NOT NULL,
 `tmt` mediumtext character set utf8 collate utf8_polish_ci NOT NULL,
 FULLTEXT KEY `tv` (`tv`),
 FULLTEXT KEY `tmt` (`tmt`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- 
-- Dumping data for table `test1`
-- 

INSERT INTO `test1` (`tv`, `tmt`) VALUES 
('źdźbło rąsnące ściemnia', 'źdźbło rąsnące ściemnia'),
('rąsnące źdźbło ściemnia', 'rąsnące źdźbło ściemnia'),
('rąsnące źdźbło', 'rąsnące źdźbło'),
('źdźbło', 'źdźbło'),
('ala ma kota', 'ala ma kota'),
('ściemnia rąsnące źdźbło', 'ściemnia rąsnące źdźbło');

Dzięki za zainteresowanie, dzieki Wam, częściowo znalazłem punkt z którym należy walczyć, otóż po usunięciu kolumny tmt w kolumnie tv zaczęło działać wyszukiwanie tego źdźbła. Tak to jest problemami, należy o nich porozmawiać :D

Edit: Wystarczy nawet całkowicie pusta kolumna mediumtext bez założonego indeksu i już wyszukiwanie w pierwszej kolumnie szwankuje, niesamowite! i co dalej? ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności