Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][zf] Zend_Search_Lucene, Wyszukiwanie z polskimi znakami
kirex
post
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.

  1. <?php
  2. $doc = new Zend_Search_Lucene_Document();
  3. $doc->addField(Zend_Search_Lucene_Field::Keyword('name', $posts[$i]['name'], 'utf-8'));
  4. ...
  5. $doc->addField(Zend_Search_Lucene_Field::UnStored('text', $posts[$i]['text'], 'utf-8'));
  6. $index->addDocument($doc);
  7. ?>


Szukanie zaś wygląda tak:
  1. <?php
  2. $query = new Zend_Search_Lucene_Search_Query_MultiTerm();
  3. $query->addTerm(new Zend_Search_Lucene_Index_Term($search, 'text'), true);
  4. $index = new Zend_Search_Lucene('./tmp/index');
  5. return $index->find($query);
  6. ?>


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kirex
post
Post #2





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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

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.
  1. <?php
  2. Zend_Search_Lucene_Analysis_Analyzer::setDefault( new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num());
  3. $index = Zend_Search_Lucene::create('./tmp/index', true);
  4.  
  5. $postId = array();
  6.  
  7. for($i=0; $i < $postsSize; $i++)
  8. {
  9.    $doc = new Zend_Search_Lucene_Document();
  10.    $doc->addField(Zend_Search_Lucene_Field::Keyword('name', $posts[$i]['name'], 'utf-8'));
  11.  
  12.    ...
  13.                 
  14.    $doc->addField(Zend_Search_Lucene_Field::UnStored('text', $posts[$i]['text'], 'utf-8'));
  15.    $index->addDocument($doc);
  16. }
  17. ?>


Szukanie zaś wygląda tak:

  1. <?php
  2.    Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8');
  3.    $query = new Zend_Search_Lucene_Search_Query_MultiTerm();
  4.    $query->addTerm(new Zend_Search_Lucene_Index_Term($search, 'text'), true);
  5.    $index = new Zend_Search_Lucene('./tmp/index');
  6.    return $index->find($query);
  7. ?>


 

co mu jeszcze nie pasi ?

Ten post edytował kirex 4.03.2008, 12:41:01
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 06:21