![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 182 Pomógł: 14 Dołączył: 20.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy to rozwiązanie jest szerzej znane - nie znalazłem go podczas googlowania.
Używam lucene z zenda pod symfony w sposób przedstawiony w tutorialu jobeet - dzień 17. Niestety przy zapytaniach zawierających polskie znaki lucene się wykrzaczało. Na sieci jest kilka rozwiązań tego problemu - poczynając od zmian w kodzie lucene (coś u mnie nie działało) przez odpowiednią konfigurację lucene z poziomu zenda (nie wiedziałem jak to zintegrować z symfony...). Niestety żadne ze znalezionych rozwiązań u mnie nie działało - dlatego przyjrzałem się temu jak jest konfigurowane lucene z poziomu propelowskiego pluginu sfLucenePlugin i tam znalazłem najlepsze działające rozwiązanie. do funkcji rejestrującej zend'a
trzeba dodać Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8');
Mam nadzieję, że to rozwiązanie zaoszczędzi komuś trochę grzebania i szukania - przynajmniej mi bardziej się podoba niż czary mary z ustawianiem na sztywno kodowań w lucene ![]() |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 11.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Hej bardzo się ucieszyłem gdy znalazłem Twój post. Bo akurat też się od dłuższego czasu z tym męczę aby to zaczęło działać poprawnie.
Wprowadziłem zmiany zalecane przez Ciebie i na pierwszy rzut oka wydawało się, że wszystko jest w porządku. Tzn coś tam się w wynikach pojawiało wiec uznałem to za sukces, ponieważ wcześniej wyszukiwarka w ogóle nie zwracała żadnych wyników. Jednak po dokładniejszej analizie zauważyłem, że Lucene przy szukaniu zaczął jednak popełniać błędy. Może podam przykład to będzie łatwiej zrozumieć jakie... Przykład 1: wpisuje w wyszukiwarce hasło: Żona znajduje wszystkie rekordy które zawierają słowo ona. Zauważyłem ten błąd ponieważ miałem za dużo wyników na liście i z rzeczy które w ogóle nie miały hasła żona w indexie. Przykład 2: Ten jest bardziej ciekawy, wpisałem hasło: Książki Lucene wyszukało mi oczywiście książki... ale... przy okazji znalazło hasła które nijak mają się do książek. Doszedłem,że gdy występuje polski znaczek tak jak w tym haśle , to Lucene znajdzie hasła które zawierają Ksi a także ki Napisz czy też to u siebie zauważyłeś jeśli tak to czy i jak sobie z tym poradziłeś. Pozdrawiam Ten post edytował trystero 14.11.2010, 07:53:11 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 182 Pomógł: 14 Dołączył: 20.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Napisz czy też to u siebie zauważyłeś jeśli tak to czy i jak sobie z tym poradziłeś. Zrobiłem taki test - wpisałem sobie do pola "żona" i po wpisaniu w wyszukiwarce "żona" oraz "ona" dostaję w wyniku właściwy rekord, ale przy wpisaniu "kona" nie dostaję nic. Czyli jeśli dobrze rozumiem, to cały mechanizm gdzieś po prostu ignoruje polskie literki. Nie radziłem sobie z tym problemem, bo w zastosowaniu w jakim używam lucene nie potrzebuję wielkiej dokładności wyszukiwania ani rozróżniania naszych literek (potrzebowałem tylko, żeby lucene się na nich nie wywalało) - nawet nie wiedziałem, że coś takiego występuje. Niestety nie mogę pomóc, ponieważ nawet nie wiem, gdzie może leżeć problem. Proponuję zapytać na liście dyskusyjnej zend'a - deweloper zajmujący się kodem lucene w zend może znać rozwiązanie lub przynajmniej stwierdzi, że to nie u niego występuje problem. Wtedy będzie się trzeba udać bezpośrednio do deweloperów lucene. (Można jeszcze spróbować jak działają najnowsze wersje - może ktoś już usunął ten błąd?) Pozdrawiam, Michał P.S. Jeśli dobrze widzę, to w indeksach, które zapisuje lucene i tak nie ma polskich znaków. Pole dodaje z ustawionym kodowaniem utf $doc->addField(Zend_Search_Lucene_Field::UnStored('about_myself', $this->getAboutMyself(), 'utf-8')); a w indeksie naszych krzaczków nie ma. Więc "żona" jest zapisywane w indeksie jako "ona". Ten post edytował michalkjp 14.11.2010, 20:45:13 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: -- Ostrzeżenie: (0%) ![]() ![]() |
Aby działało poprawnie musicie jeszcze zmienić domyślnego "porównywacza" (Zend_Search_Lucene_Analysis_Analyzer), poniższy kod u mnie działa poprawnie i nie występują problemy opisane przez michalkjp
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 04:45 |