6 Stimmen

Suche nach Zahlen mit Zend_Search_Lucene

Warum also liefert das erste Suchbeispiel unten keine Ergebnisse? Und jede Idee, wie man den untenstehenden Code ändern kann, um eine Zahlensuche zu ermöglichen, wäre sehr willkommen.

Den Index erstellen

$index = new Zend_Search_Lucene('/myindex', true);
$doc->addField(Zend_Search_Lucene_Field::Text('ssn', '123-12-1234'));
$doc->addField(Zend_Search_Lucene_Field::Text('cats', 'Fluffy'));
$index->addDocument($doc);
$index->commit();

Suche - KEINE ERGEBNISSE

$index = new Zend_Search_Lucene('/myindex', true);
$results = $index->find('123-12-1234');

Suche - MIT ERGEBNISSEN

$index = new Zend_Search_Lucene('/myindex', true);
$results = $index->find('Fluffy');

3voto

Mon Villalon Punkte 682

Zuerst müssen Sie Ihren Textanalysator so ändern, dass er Zahlen enthält

Zend_Search_Lucene_Analysis_Analyzer::setDefault( new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum() );

Für Felder mit Zahlen verwenden Sie dann Zend_Search_Lucene_Field::Schlüsselwort 代わりに Zend_Search_Lucene_Field::Text überspringt die Erstellung von Token und speichert den Wert "wie er ist" im Index. Dann können Sie danach suchen. Ich weiß nicht, wie es mit Fließkommazahlen verhält (wird wahrscheinlich nicht für Fließkommazahlen funktionieren 3.0 wird nicht mit 3 übereinstimmen) aber für natürliche Zahlen (wie ids) funktioniert wie ein Charme.

2voto

Zoredache Punkte 34350

Dies hängt davon ab, welchen Analyzer Sie gewählt haben.

Ich glaube, die Standard-Analysator werden nur Begriffe indiziert, die mit /[a-zA-Z]+/ übereinstimmen. Das bedeutet, dass Ihre SSN nicht als Begriff in den Index aufgenommen wird.

Selbst wenn Sie zum Analyzer mit Groß- und Kleinschreibung wechseln, wird das, was Sie wollen, nicht funktionieren. Der Ausdruck für einen Begriff ist /[a-zA-Z0-9]+/. Das würde bedeuten, dass Ihre zum Index hinzugefügten Begriffe 12.123.1234 wären.

Wenn 123-12-1234 als gültiger Begriff angesehen werden soll, muss man wahrscheinlich Zend_Search_Lucene_Analysis_Analyzer_Common erweitern und es so einrichten, dass 123-12-1234 ein Begriff ist.

Siehe http://framework.zend.com/manual/en/zend.search.lucene.extending.html#zend.search.lucene.extending.analysis

Die andere Möglichkeit ist die Speicherung der ssn als Zend_Search_Lucene_Field::Keyword. Da ein Schlüsselwort nicht in Begriffe unterteilt ist.

http://framework.zend.com/manual/en/zend.search.lucene.html#zend.search.lucene.index-creation.understanding-field-types

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X