![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 4 Dołączył: 3.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam problem z wyszukiwaniem polskich znaków w bibliotece zenda Zend_Search_Lucene. Ogólnie wyszukiwanie działa dosyć dobrze, problem jest tylko gdy w szukanej frazie znajdzie się choć jeden polski znak, wówczas Lucene zwraca mi 0 rekordów. Cała strona ustawiona jest na kodowanie utf-8, takie też podawane jest przy tworzeniu indexów przez luncene. Tworzenie index'ów wygląda w sposób przedstawiony poniżej, dane pobierane są z bazy i w pętl indexowane.
Szukanie zaś wygląda tak:
Wydaje mi się, że wszystko jest tak jak powinno być a mimo to nie działa. Może ktoś spotkał się już z takim problemem i go rozwiązał ? Jeśli tak to prosze o pomoc ? Z góry dzięki. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Administrator wortalu Grupa: Przyjaciele php.pl Postów: 960 Pomógł: 39 Dołączył: 21.10.2003 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Akurat nie miałem do czynienia jeszcze z tym komponentem, ale kiedyś był podobny temat: http://forum.php.pl/index.php?showtopic=64433
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 1 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dla potrzeb indeksowania ustaw analizer:
Kod Zend_Search_Lucene_Analysis_Analyzer::setDefault( new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num() ); A dla wyszukiwania: Kod Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8'); Jedynym minusem jest wrażliwość tego analizera na wielkość znaków, ale z tym możesz sobie poradzić indeksując w dodatkowym polu całą treść przerobioną strtolower() a następnie robiąc to samo z zapytaniem wyszukiwania. -------------------- lorem ipsum : polska społeczność zend framework
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 4 Dołączył: 3.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Sabistik od początku wzorowałem się na tym poście
![]() cyphelf dodałem analizer i domyślne kodowanie, a w dalszym ciągu brak efektu :/ Mam jeszcze pytanie czy metoda porównywania napisów w bazie ma znaczenie, u siebie mam "utf8_polish_ci". Dodatkowo napiszę że: w index.php jest: mb_internal_encoding('UTF-8'); iconv_set_encoding('input_encoding', 'UTF-8'); iconv_set_encoding('output_encoding', 'UTF-8'); iconv_set_encoding('internal_encoding', 'UTF-8'); przy połączeniu z bazą wykonuję: $adapter = parent::factory($adapterName, $config); $adapter->query('SET NAMES utf8'); $adapter->query('SET CHARACTER SET utf8'); na każdej stronie w html'u jest: <meta content="text/html; charset=utf-8" http-equiv="content-type" /> Tworzenie index'ów wygląda teraz tak: indexowane.
Szukanie zaś wygląda tak:
co mu jeszcze nie pasi ? Ten post edytował kirex 4.03.2008, 12:41:01 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 1 Dołączył: 27.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdź zbudowany indeks programem Luke i zobacz czy na liście słowa kluczowe mają polskie znaki. Dowiemy się czy błąd jest w indeksowaniu czy wyszukiwaniu.
-------------------- lorem ipsum : polska społeczność zend framework
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 4 Dołączył: 3.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
cyphelf dzieki za podpowiedź, sprawdziłem i faktycznie jest zonk.
Po sprawdzeniu tym programem okazało się, że czasem mam polską czcionke a niekiedy krzaki. Zajrzałem do bazy i jest to samo. Dla testu wpisałem sobie polskie znaki przez pma i szukanie zaczeło smigać, a co za tym idzie mam coś zwalone przy dodawaniu rekordów do bazy, czasem dodaje dobrze a czasem z krzakami :/ przez to własnie lucene nie może wyszukiwać. Tak więc dzięki cyphelf, lucene śmiga, czas szukać błędu w innym miejscu :/ Ten post edytował kirex 6.03.2008, 15:47:53 |
|
|
![]()
Post
#7
|
|
Grupa: Zablokowani Postów: 167 Pomógł: 2 Dołączył: 15.02.2004 Ostrzeżenie: (30%) ![]() ![]() |
Korzystam od dawna z Lucyny i niestety nie działa prawidłowo na polskich ogonkach. Najlepiej zabezpieczyć się prostym trickiem. Normalizuj polskie znaki na znaki bez ogonków ą => a, ś => s i takowe zdania, słowa indeksuj. Podobnie przy wyszukiwaniu. Ma to dodatkowy atut, że wyszuka i słowo "ślązak" i "slazak". Oczywiście, do dokumentu dodaję frazy do zaindeksowania, które są bez ogonków oraz przechowuje też dane z polskimi ogonkami, które wyświetlam w wynikach (tytuł i opis).
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 45 Pomógł: 1 Dołączył: 15.02.2006 Skąd: Zakrzów Ostrzeżenie: (0%) ![]() ![]() |
Hm, chyba mam problem w jakiś sposób związany z polskimi znakami. Strona jest na kodowaniu iso8859-2, dodając dokument do indeksu podaję wejściowe kodowanie i w indeksie podejrzanym przez Luke wszystko jest na miejscu, polskie znaki ładne. I wyszukiwanie działa.
Ale dodawanie dokumentów do indeksu robi się coraz wolniejsze, im więcej ich już tam jest. Aktualnie wrzuciłem 5000 szt. i aktualizacja jednego trwa parę sekund. Wcześniej doszedłem do 10k i już były pady totalne. Podejrzewałem, że może Lucene zżera pamięć (limit 64mb) ale jeśli jakiś błąd php się pojawi, to jest to przekroczenie czasu wykonania (30sek.) w klasach Lucene związanych z obsługą plików indeksu. Sam indeks jest poprawny chyba, bo przez Luke mogę go otworzyć i wyszukiwać. Jedna rzecz jest dziwna: w indeksie jest 5k rekordów, zaś Luke pokazuje "Number of terms" = 14 000. Przy czym niektóre termy są poucinane na polskich znakach, czyli jeśli wejściowo było słowo "szkoła" to tam figuruje "szko". Czy to jest normalne? W dokumentacji piszą, że duża ilość termów może zamulać, ale czy to jest duża ilość? Pliki indeksu mają razem ledwo 2MB. -------------------- Linux is like wigwam: no gates, no windows, apache inside.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 05:00 |