Abfrage Erzeugungs APIZusätzlich zum automatischen Analysieren vom Abfragen ist es auch möglich diese durch eine API zu erzeugen. Benutzerabfragen können mit Abfragen die durch die API erstellte wurden kombiniert werden. Einfach den Abfrageparser verwenden um eine Abfrage von einem String zu erstellen:
Abfrageparser AusnahmenDer Abfrageparser kann zwei Typen von Ausnahmen erstellen.
Die selbe Technik sollte für die find() Methode des Zend_Search_Lucene Objektes verwendet werden. Beginnend mit 1.5 werden Abfrageparser Exceptions standardmäßig unterdrückt. Wenn eine Abfrage nicht konform mit der Abfragesprache ist, dann wird Sie mithilfe des aktuellen Standardanalysators gestückelt und alle Begriffsstücke werden für die Suche verwendet. Die Zend_Search_Lucene_Search_QueryParser::dontSuppressQueryParsingExceptions() Methode kann verwendet werden um Exceptions einzuschalten. Die Zend_Search_Lucene_Search_QueryParser::suppressQueryParsingExceptions() und Zend_Search_Lucene_Search_QueryParser::queryParsingExceptionsSuppressed() Methoden sind auch dazu gedacht das Verhalten der Exceptionsbehandlung zu verwalten. BegriffsabfrageBegriffsabfragen können für das Suchen mit einem einzelnen Begriff verwendet werden. Abfragestring:
oder Aufbau der Abfrage mit der API:
Das Term Feld ist optional. Zend_Search_Lucene durchsucht alle indizierten Felder in jedem Dokument wenn das Feld nicht spezifiziert wurde:
Mehrfache BegriffsabfrageMehrfache Begriffsabfragen sind für Suchen mit einem Satz von Begriffen gedacht. Jeder Begriff dieses Satzes kann als required (notwendig), prohibited (verboten) oder neither (weder noch) definiert werden.
Wenn einer Abfrage mit notwendigen Begriffen optionale Betriffe hinzugefügt werden, werden beide Abfragen das gleiche Set an Ergebnissen haben, aber der optionale Begriff kann die Bewertung der passenden Dokumente beeinflussen. Beide Suchmethoden können für Mehrfache Begriffsabfragen verwendet werden. Abfragestring:
oder Aufbau der Abfrage mit der API:
Es ist auch möglich Begriffslisten in einem MultiTerm Anfrage Konstruktor zu spezifizieren: Das $signs Array enthält Informationen über den Begriffstyp:
Boolsche AbfragenBoolsche Abfragen erlauben die Erstellung von Abfragen die andere Abfragen und boolsche Operatoren verwenden. Jede Subabfrage in einem Set kann als required, prohibited, oder optional definiert werden.
Wenn optionale Unterabfragen einer Abfrage mit benötigen Unterabfragen hinzugefügt werden, werden beide Abfragen das gleiche Ergebnisset haben, aber die optionale Unterabfrage kann die Wertung der passenden Dokumente beeinflussen. Beide Suchmethoden können für boolsche Abfragen verwendet werden. Abfrage String:
oder Aufbau der Abfrage durch die API:
Es ist auch möglich Listen von Unterabfragen im Konstruktor der Boolschen Abfrage zu definieren: Das $signs Array enthält Informationen über den Typ der Unterabfrage:
Jede Abfrage die boolsche Operatoren verwendet kann, kann auch auch umgeschrieben werden damit Sie die Vorzeichen-Schreibweise verwendet und mit Hilfe der API erstellt wird. Zum Beispiel:
ist identisch mit
Wildcard AbfragenWildcard Abfragen können dazu verwendet werden um nach Dokumenten zu suchen die Strings enthalten welche den spezifizierten Patterns entsprechen. Das '?' Symbol wird als Wildcard für ein einzelnes Zeichen verwendet. Das '*' Symbol wird als Woldcard für mehrere Zeichen verwendet. Abfragestring:
oder Abfrageerstellung durch die API:
Die Ausdrucksfelder sind optional. Zend_Search_Lucene durchsucht alle Felder in jedem Dokument wenn kein Feld spezifiziert wurde:
Fuzzy AbfragenFuzzy Abfragen können verwendet werden um nach Dokumenten zu Suchen die Strings enthalten welche Ausdrücken entsprechen die den spezifizierten Ausdrücken ähnlich sind. Abfrage String:
Diese Abfrage trifft Dokumente welche die Wörter 'test' 'text' 'best' und andere enthalten. oder Abfrageerstellung durch die API:
Optional kann die Ähnlichkeit nach dem "~" Zeichen spezifiziert werden. Abfrage String:
oder Abfrageerstellung durch die API:
Das Term Feld ist optional. Zend_Search_Lucene durchsucht alle Felder in jedem Dokument ob ein Feld nicht spezifiziert ist:
PhrasenabfragePhrasenabfragen können für das Suchen einer Phrase innerhalb von Dokumenten verwendet werden. Phrasenabfragen sind sehr flexibel und erlauben dem Benutzer oder Entwickler nach exakten Phrasen zu suchen wie auch nach 'ungenauen' Phrasen. Phrasen können auch Lücken oder mehrere Begriffe an der selben Stelle enthalten; diese können mit Hilfe das Analysators für verschiedene Zwecke generiert werden, z.B. kann ein Begriff verdoppelt werden, um das Gewicht des Begriffs zu erhöhen oder verschiedene Synonyme können an einer Stelle platziert werden.
Eine Phrasenabfrage kann in einem Schritt mit einem Klassenkonstruktor erstellt werden oder Schritt für Schritt mit der Zend_Search_Lucene_Search_Query_Phrase::addTerm() Methode. Der Zend_Search_Lucene_Search_Query_Phrase Klassenkonstruktor nimmt drei optionale Argumente entgegen: Der $terms Parameter ist ein Array von Strings die ein Set von Phrasen Strings enthalten. Wenn er ausgelassen wird oder NULL ist, wird eine leere Abfrage erstellt. Der $offsets Parameter ist von ganzen Zahlen, welche den Offset von Begriffen in einer Phrase enthalten. Wenn er ausgelassen wird oder TRUE ist, werden die Positionen der Begriffe als sequentiell, ohne Zwischenräume, angenommen. Der $field Parameter ist ein String, der das zu durchsuchende Dokumentenfeld angibt. Wenn dies ausgelassen wird oder TRUE entspricht, wird das Standardfeld durchsucht.
Wird nach der Phrase 'zend framework' in allen Feldern suchen. Es wird nach der Phrase 'zend ????? download' gesucht und die Phrasen 'zend platform download', 'zend studio download', 'zend core download', 'zend framework download' und so weiter werden gefunden.
Wird nach der Phrase 'zend framework' im 'title' Feld suchen. Die Zend_Search_Lucene_Search_Query_Phrase::addTerm() Methode nimmt zwei Argumente entgeben. Ein Zend_Search_Lucene_Index_Term Objekt ist erforderlich und die Position optional:
$term enthält den nächsten Begriff in der Phrase. Er muss das selbe Feld ansprechen wie der vorherige Begriff. Andernfalls wird eine Ausnahme geworfen. $position gibt die Position des Begriffes an.
Demnach wird hier nach der Phrase 'zend framework' gesucht.
Es wird nach der Phrase 'zend ????? download' gesucht und die Phrasen 'zend platform download', 'zend studio download', 'zend core download', 'zend framework download' und so weiter werden gefunden.
Es wird nach der Phrase 'zend framework' im 'title' Feld gesucht. Der Ungenauigkeitsfaktor (slop factor) legt die Anzahl der anderen Wörter fest die zwischen den spezifizierten Phrasenabfragen erlaubt sind. Wenn der Wert 0 ist, ist die entsprechende Abfrage eine exakte Suche nach der Phrase. Für größere Werte funktioniert das ähnlich dem WITHIN (innerhalb) oder NEAR (nahe) Operator. Der Ungenauigkeitsfaktor ist tatsächlich eine veränderbare Distanz, wobei die Veränderung dem Verschieben von Begriffen in der Phrasenabfrage entspricht. Um zum Beispiel die Reihenfolge von zwei Wörtern zu wechseln, werden zwei Verschiebungen benötigt (die erste Verschiebung plaziert die Wörter übereinander). Um also die Neusortierung der Phrasen zu erlauben, muß der Ungenauigkeitsfaktor mindestens zwei sein. Exaktere Treffer werden höher bewertet als ungenauere Treffer, so dass die Suchergebnisse nach der Genauigkeit sortiert werden. Die Ungenauigkeit liegt standardmäßig bei 0, was exakte Treffer erfordert. Der Ungenauigkeitsfaktor kannnach der Erstellung der Abfrage zugeordnet werden:
BereichsabfragenBereichsabfragen sind dazu gedacht Terme innerhalb eines spezifizierten Intervalls zu suchen. Abfragestring:
oder Abfrageerstellung durch die API:
Begriffsfelder sind optional. Zend_Search_Lucene durchsucht alle Felder wenn das Feld nicht spezifiziert wurde:
Jede (aber nicht beide) der Begrenzungsausdrücke kann auf TRUE gesetzt werden. Zend_Search_Lucene sucht vom Anfang oder bis zum Ende des Verzeichnisses für die spezifizierten Feld(er) für diesen Fall:
|