Zend_Search_Lucene – Suche nach Zahlen

Wenn man bei der Standardsuche von Zend_Search_Lucene nach Zahlen sucht, bekommt man eine Exception

// Suche nach z.B.: 12345
Application error
 
Exception information:
 
Message: At least 3 non-wildcard characters are required at the beginning of pattern.
 
Stack trace:
...

Das Problem ist, das der Standard Zend_Search_Lucene_Analysis_Analyzer keine Numeric Werte mit aufnimmt.

Abhilfe schafft es, den Analyzer beim parsen einfach neu zu setzen

Zend_Search_Lucene_Analysis_Analyzer::setDefault(
    new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive()
);

Dann sollte es auch mit der Suche nach Zahlen klappen.

Die Lösung kommt vom ZF Issue Tracker

Related Posts:

ZendFramework – Eindeutigen Datensatz prüfen

Das Zend Framework bietet mit seinen Validatoren sehr schöne Möglichkeiten, die Daten des Benutzers zu prüfen. Bisher habe ich immer im Controller geprüft, ob es einen Datensatz schon einmal gibt, wie z.B.: E-Mail Adresse, oder Benutzername. Doch es geht noch viel einfacher. Das ZendFramework bietet dafür die Klasse Zend_Validate_Db_NoRecordExists an. Diese erbt von der abstrakten Klasse Zend_Validate_Db_Abstract. Als Parameter gibt man in diesem Beispiel die Tabelle und die zu prüfende Spalte an.

Hier ein Beispiel der Benutzung in der Formklasse eureres Moduls

 
class User_Form_Register extends Zend_Form
{
    /**
     * Init the Registerform
     *
     * @return void
     */
    public function init()
    {
 
        $this->setAttrib('id', 'registerform');
        $this->setAction('/user/index/create');
 
        // ...
 
        // username
        $dbValUnique = new Zend_Validate_Db_NoRecordExists('user', 'username'); // Das DB ValidatorObjekt
        $username = new Zend_Form_Element_Text('username');
        $username->setLabel('Benutzername');
        $username->setRequired();
        $username->addValidator('regex', true, array('/^[a-z]/i'));
        $username->addValidator($dbValUnique); // Hinzufügen zum Element
 
        $this->addElement($username);
 
 
        // ...
 
 
        // e-mail
        $dbValUnique = new Zend_Validate_Db_NoRecordExists('user', 'email'); // Das DB ValidatorObjekt
        $email = new Zend_Form_Element_Text('email');
        $email->setLabel('E-Mail');
        $email->setRequired();
        $email->addValidator(new Zend_Validate_EmailAddress());
        $email->addValidator($dbValUnique); // Hinzufügen zum Element
 
        $this->addElement($email);
 
        // ...
 
    }
}

Related Posts: