Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zend_Search_Lucene
Martio
post
Post #1





Grupa: Zablokowani
Postów: 167
Pomógł: 2
Dołączył: 15.02.2004

Ostrzeżenie: (30%)
XX---


Kiedyś był problem z polskimi znakami. Czy wiecie może czy ten błąd już poprawiono? W manualu nic nie jest napisane.

Ten post edytował Martio 17.03.2007, 18:46:04
Go to the top of the page
+Quote Post
konys
post
Post #2





Grupa: Zarejestrowani
Postów: 100
Pomógł: 7
Dołączył: 5.11.2005

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


Osobiście miałem niewielki problem z indeksowaniem niektórych polskich liter (ż,ś, może coś jeszcze) (korzystam z UTF-8). Poprawiłem w pliku Zend\Search\Lucene\Analysis\Analyzer\Common\Text.php funkcję

  1. <?php
  2. public function reset()
  3. {
  4. $this->_position = 0;
  5.  
  6. if ($this->_input === null) {
  7. return;
  8. }
  9.  
  10. // convert input into ascii
  11. $this->_input = iconv($this->_encoding, 'UTF-8'/*'ASCII//TRANSLIT'*/, $this->_input);
  12. $this->_encoding = 'UTF-8'/*'ASCII'*/;
  13. }
  14. ?>


oraz w Zend\Search\Lucene\Search\QueryLexer.php zmieniłem 346 linijkę (w funkcji tokenize())
  1. <?php
  2. $strLength = iconv_strlen($inputString, 'UTF-8'/*$encoding*/);
  3. ?>


Na szybkiego wydaje się działać, ale nie dałbym temu kodowi 100% gwarancji...

____________________________________________________
Znalazłem trochę lepsze rozwiązanie:

w bootstrap file dodaj następujące ustawienia:
  1. <?php
  2. mb_internal_encoding('UTF-8');
  3. iconv_set_encoding('input_encoding', 'UTF-8');
  4. iconv_set_encoding('output_encoding', 'UTF-8');
  5. iconv_set_encoding('internal_encoding', 'UTF-8');
  6. ?>


po wystartowaniu bazy:

  1. <?php
  2. $db->query('SET CHARACTER SET utf8');
  3. ?>


w pliku Zend/Search/Lucene/Search/QueryParser.php zmień wartość atrybutu $_defaultEncoding
  1. <?php
  2. private $_defaultEncoding = 'UTF-8';
  3. ?>


i przy indeksowaniu danych podawaj w jakim chcesz je wprowadzić kodowaniu - np.
  1. <?php
  2. $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $contents, 'UTF-8'));
  3. ?>


Powinno działać

Ten post edytował konys 20.03.2007, 12:33:15
Go to the top of the page
+Quote Post
Martio
post
Post #3





Grupa: Zablokowani
Postów: 167
Pomógł: 2
Dołączył: 15.02.2004

Ostrzeżenie: (30%)
XX---


Wszystko OK, należy tylko stosować funkcje do stringów z biblioteki Multibyte String, a więc np. zamiast strtolower zastosować mb_strtolower.

Ten post edytował Martio 26.04.2007, 10:15:02
Go to the top of the page
+Quote Post
dafi
post
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 1
Dołączył: 14.03.2005

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


co do polskich znaków to rozwiązaniem jest zastąpienie defaultowego analysera który działa na zestawie znaków ASCII takim który działa z utf-8.

trzeba to wykonać zarówno przed indexowaniem jaki i wyszukiwaniem poleceniem :

  1. Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive());


dla wyników które nie mają uwzględniać wielkości znaków lub :
  1. Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());


dla tych co mają je uwzględniać.

Ewentualnie można jeszcze poprawić "podświetlanie wyników" by poprawnie obsługiwało polskie znaki.
Znowu winien jest analyser a dokładnie jego wywołanie bez parametru kodowania.

plik: Zend_Search_Lucene_Document_Html metoda: highlightExtended()

zamienić :
  1. $wordsToHighlightList[] = $analyzer->tokenize($wordString);

na:
  1. $wordsToHighlightList[] = $analyzer->tokenize($wordString,'UTF-8');




[ZF ver: 1.10.3]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.12.2025 - 14:02