Previous Next

Abfrage Erzeugungs API

Zusä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 Ausnahmen

Der Abfrageparser kann zwei Typen von Ausnahmen erstellen.

  • Zend_Search_Lucene_Exception wird geworfen wenn irgendwas im Abfrageparser selbst falsch läuft.

  • Zend_Search_Lucene_Search_QueryParserException wird geworfen wenn ein Fehler im Syntax der Abfrage ist.

Es ist eine gute Idee die Zend_Search_Lucene_Search_QueryParserException abzufangen und richtig abzuarbeiten:
getMessage() . "\n";
}

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.

Begriffsabfrage

Begriffsabfragen können für das Suchen mit einem einzelnen Begriff verwendet werden.

Abfragestring:

word1

oder

Aufbau der Abfrage mit der Programmierschnittstelle (API):

find($query);

Das Term Feld ist optional. Zend_Search_Lucene durchsucht alle indizierten Felder in jedem Dokument wenn das Feld nicht spezifiziert wurde:

find($query);

Mehrfache Begriffsabfrage

Mehrfache 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.

  • required bedeutet, dass Dokumente, die diesen Begriff nicht enthalten, nicht der Abfrage entsprechen;

  • prohibited bedeutet, dass Dokumente, die diesen Begriff enthalten, nicht der Abfrage entsprechen;

  • neither, in welchem Fall Dokumenten den Begriff weder nicht enthalten dürfen, noch den Begriff enthalten müssen. Nichtsdestrotrotz muß ein Dokument mindestens einem Begriff entsprechen, um der Abfrage zu entsprechen.

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:

+word1 author:word2 -word3
  • '+' wird für notwendige Begriffe verwendet.

  • '-' wird für verbotene Begriffe verwendet.

  • Der 'field:' Präfix wird für die Angabe des Dokumentenfelds für die Suche verwendet. Wenn er weggelassen wird, werden alle Felder durchsucht.

oder

Aufbau der Abfrage mit der Programmierschnittstelle (API):

addTerm(new Zend_Search_Lucene_Index_Term('word1'), true);
$query->addTerm(new Zend_Search_Lucene_Index_Term('word2', 'author'), null);
$query->addTerm(new Zend_Search_Lucene_Index_Term('word3'), false);

$hits  = $index->find($query);

Es ist auch möglich Begriffslisten in einem MultiTerm Anfrage Konstruktor zu spezifizieren:

find($query);

Das $signs Array enthält Informationen über den Begriffstyp:

  • true wird für notwendige Begriffe verwendet.

  • false wird für verbotene Begriffe verwendet.

  • null wird für weder notwendige noch verbotene Begriffe verwendet.

Boolsche Abfragen

Boolsche 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.

  • required bedeutet das Dokumente die dieser Unterabfrage nicht entsprechen auch der Gesamtabfrage nicht entsprechen;

  • prohibited bedeutet das Dokumente die dieser Unterabfrage entsprechen auch der Gesamtabfrage nicht entsprechen;

  • optional, in dem Fall das entsprechende Dokumente in der Unterabfrage weder verboten noch benötigt werden. Ein Dokument muß trotzdem zumindest in 1 Unterabfrage entsprechen damit es der in der Gesamtabfrage entspricht.

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:

+(word1 word2 word3) author:(word4 word5) -word6
  • '+' wird verwendet um eine benötigte Unterabfrage zu definieren.

  • '-' wird verwendet um eine verbotene Unterabfrage zu definieren.

  • 'field:' Der Prefix wird verwendet um ein Feld des Dokuments für eine Suche zu markieren. Wenn es nicht angegeben wird, werden alle Felder durchsucht.

oder

Konstruktion der Abfrage durch die API:

addTerm(new Zend_Search_Lucene_Index_Term('word1'));
$subquery1->addTerm(new Zend_Search_Lucene_Index_Term('word2'));
$subquery1->addTerm(new Zend_Search_Lucene_Index_Term('word3'));

$subquery2 = new Zend_Search_Lucene_Search_Query_MultiTerm();
$subquery2->addTerm(new Zend_Search_Lucene_Index_Term('word4', 'author'));
$subquery2->addTerm(new Zend_Search_Lucene_Index_Term('word5', 'author'));

$term6 = new Zend_Search_Lucene_Index_Term('word6');
$subquery3 = new Zend_Search_Lucene_Search_Query_Term($term6);

$query->addSubquery($subquery1, true  /* benötigt (required) */);
$query->addSubquery($subquery2, null  /* optional */);
$query->addSubquery($subquery3, false /* verboten (prohibited) */);

$hits  = $index->find($query);

Es ist auch möglich Listen von Unterabfragen im Konstruktor der Boolschen Abfrage zu definieren:

find($query);

Das $signs Array enthält Informationen über den Typ der Unterabfrage:

  • true wird verwendet um eine benötigte Unterabfrage zu definieren.

  • false wird verwendet um eine verbotene Unterabfrage zu definieren.

  • null wird verwendet um eine Unterabfrage zu definieren die weder benötigt noch verboten ist.

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:

word1 AND (word2 AND word3 AND NOT word4) OR word5
ist identisch mit
(+(word1) +(+word2 +word3 -word4)) (word5)

Beginnend mit 1.5, Wildcard Abfragen

Wildcard 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:

field1:test*

oder

Abfrageerstellung durch die API:

find($query);

Die Ausdrucksfelder sind optional. Zend_Search_Lucene durchsucht alle Felder in jedem Dokument wenn kein Feld spezifiziert wurde:

find($query);

Beginnend mit 1.5, Fuzzy Abfragen

Fuzzy 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:

field1:test~
Diese Abfrage trifft Dokumente die die Wörter 'test' 'text' 'best' und andere enthalten.

oder

Abfrageerstellung durch die API:

find($query);

Optional kann die Ähnlichkeit nach dem "~" Zeichen spezifiziert werden.

Abfrage String:

field1:test~0.4

oder

Abfrageerstellung durch die API:

find($query);

Das term Feld ist optional. Zend_Search_Lucene durchsucht alle Felder in jedem Dokument ob ein Feld nicht spezifiziert ist:

find($query);

Phrasenabfrage

Phrasenabfragen 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.

addTerm(new Zend_Search_Lucene_Index_Term('word1'));

// Füge 'word2' an der relativen Position 1 hinzu.
$query1->addTerm(new Zend_Search_Lucene_Index_Term('word2'));

// Füge 'word3' an der relativen Position 3 hinzu.
$query1->addTerm(new Zend_Search_Lucene_Index_Term('word3'), 3);

...

$query2 = new Zend_Search_Lucene_Search_Query_Phrase(
                array('word1', 'word2', 'word3'), array(0,1,3));

...

// Abfrage ohne eine Lücke.
$query3 = new Zend_Search_Lucene_Search_Query_Phrase(
                array('word1', 'word2', 'word3'));

...

$query4 = new Zend_Search_Lucene_Search_Query_Phrase(
                array('word1', 'word2'), array(0,1), 'annotation');

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 null 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 null 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.

addTerm(new Zend_Search_Lucene_Index_Term('zend'));
$query->addTerm(new Zend_Search_Lucene_Index_Term('framework'));

Demnach wird hier nach der Phrase 'zend framework' gesucht.

addTerm(new Zend_Search_Lucene_Index_Term('zend'), 0);
$query->addTerm(new Zend_Search_Lucene_Index_Term('framework'), 2);

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.

addTerm(new Zend_Search_Lucene_Index_Term('zend', 'title'));
$query->addTerm(new Zend_Search_Lucene_Index_Term('framework', 'title'));

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:

setSlop(1);
$hits1 = $index->find($query);

// Search for 'word1 word2', 'word1 ... word2',
// 'word1 ... ... word2', 'word2 word1'
$query->setSlop(2);
$hits2 = $index->find($query);

Bereichsabfragen

Bereichsabfragen sind dazu gedacht Terme innerhalb eines spezifizierten Intervalls zu suchen.

Abfragestring:

mod_date:[20020101 TO 20030101]
title:{Aida TO Carmen}

oder

Abfrageerstellung durch die API:

find($query);

Begriffsfelder sind optional. Zend_Search_Lucene durchsucht alle Felder wenn das Feld nicht spezifiziert wurde:

find($query);

Jede (aber nicht beide) der Begrenzungsausdrücke kann auf null gesetzt werden. Zend_Search_Lucene sucht vom Anfang oder bis zum Ende des Verzeichnisses für die spezifizierten Feld(er) für diesen Fall:

find($query);

Previous Next
Introduction to Zend Framework
Übersicht
Installation
Zend_Acl
Einführung
Verfeinern der Zugriffskontrolle
Fortgeschrittene Verwendung
Zend_Auth
Einführung
Datenbanktabellen Authentifizierung
Digest Authentication
HTTP Authentication Adapter
LDAP Authentifizierung
Open ID Authentifikation
Zend_Cache
Einführung
Die Theorie des Cachens
Zend_Cache Frontends
Zend_Cache Backends
Zend_Captcha
Introduction
Captcha Operation
Captcha Adapters
Zend_Config
Einleitung
Theory of Operation
Zend_Config_Ini
Zend_Config_Xml
Zend_Console_Getopt
Einführung in Getopt
Definieren von Getopt Regeln
Holen von Optionen und Argumenten
Konfigurieren von Zend_Console_Getopt
Zend_Controller
Zend_Controller Schnellstart
Zend_Controller Grundlagen
Der Front Controller
Das Request Objekt
Der Standard Router: Zend_Controller_Router_Rewrite
Der Dispatcher
Action Kontroller
Action Helfer
Das Response Objekt
Plugins
Eine konventionelle modulare Verzeichnis Struktur verwenden
MVC Ausnahmen
Migration von vorhergehenden Versionen
Zend_Currency
Einführung in Zend_Currency
Arbeiten mit Währungen
Migration von vorhergehenden Versionen
Zend_Date
Einführung
Theorie der Arbeitsweise
Basis Methoden
Zend_Date API Übersicht
Erstellen von Datumswerten
Konstanten für generelle Datums Funktionen
Funktionierende Beispiele
Zend_Db
Zend_Db_Adapter
Zend_Db_Statement
Zend_Db_Profiler
Zend_Db_Select
Zend_Db_Table
Zend_Db_Table_Row
Zend_Db_Table_Rowset
Zend_Db_Table Relationships
Zend_Debug
Variablen ausgeben
Zend_Dojo
Introduction
Zend_Dojo_Data: dojo.data Envelopes
Dojo View Helpers
Dojo Form Elements and Decorators
Zend_Dom
Introduction
Zend_Dom_Query
Zend_Exception
Verwenden von Ausnahmen
Zend_Feed
Einführung
Feeds importieren
Feeds von Websites abrufen
Einen RSS Feed konsumieren
Einen Atom Feed konsumieren
Einen einzelnen Atom Eintrag konsumieren
Verändern der Feed- und Eintragsstruktur
Eigene Klassen für Feeds und Einträge
Zend_File
Zend_File_Transfer
Validators for Zend_File_Transfer
Zend_Filter
Einführung
Standard Filter Klassen
Filter Ketten
Filter schreiben
Zend_Filter_Input
Zend_Filter_Inflector
Zend_Form
Zend_Form
Schnellstart mit Zend_Form
Erstellen von Form Elementen mit Hilfe von Zend_Form_Element
Erstellen von Form durch Verwendung von Zend_Form
Erstellen von eigenem Form Markup durch Zend_Form_Decorator
Standard Form Elemente die mit dem With Zend Framework ausgeliefert werden
Standard Form Dekoratore die mit dem Zend Framework ausgeliefert werden
Internationalisierung von Zend_Form
Fortgeschrittene Verwendung von Zend_Form
Zend_Gdata
Einführung zu Gdata
Authentifizierung mit AuthSub
Authentifizieren mit ClientLogin
Google Kalender verwenden
Verwenden der Google Dokumente Listen Daten API
Google Tabellenkalkulation verwenden
Google Apps Provisionierung verwenden
Google Base verwenden
Verwenden der YouTube Daten API
Picasa Web Alben verwenden
Gdata Ausnahmen auffangen
Zend_Http
Zend_Http_Client - Einführung
Zend_Http_Client - Fortgeschrittende Nutzung
Zend_Http_Client - Verbindungsadapter
Zend_Http_Cookie und Zend_Http_CookieJar
Zend_Http_Response
Zend_InfoCard
Einführung
Zend_Json
Einführung
Grundlegende Verwendung
JSON Objects
XML zu JSON Konvertierung
Zend_Json_Server - JSON-RPC server
Zend_Layout
Einführung
Zend_Layout Schnellstart
Zend_Layout Konfigurations Optionen
Erweiterte Verwendung von Zend_Layout
Zend_Ldap
Einleitung
Zend_Loader
Dynamisches Laden von Dateien und Klassen
Plugins laden
Zend_Locale
Einführung
Zend_Locale verwenden
Normalisierung und Lokalisierung
Arbeiten mit Daten und Zeiten
Unterstützte Sprachen für Gebietsschemata
Unterstützte Regionen für Gebietsschemata
Zend_Log
Übersicht
Writer
Formatter
Filter
Zend_Mail
Einführung
Versand über SMTP
Versand von mehreren E-Mails über eine SMTP Verbindung
Verwendung von unterschiedlichen Versandwegen
HTML E-Mail
Anhänge
Empfänger hinzufügen
Die MIME Abgrenzung kontrollieren
Zusätzliche Kopfzeilen
Zeichensätze
Kodierung
SMTP Authentifizierung
SMTP Übertragungen sichern
Lesen von Mail Nachrichten
Zend_Measure
Einführung
Erstellung einer Maßeinheit
Ausgabe von Maßeinheiten
Manipulation von Maßeinheiten
Arten von Maßeinheiten
Zend_Memory
Übersicht
Memory Manager
Memory Objekte
Zend_Mime
Zend_Mime
Zend_Mime_Message
Zend_Mime_Part
Zend_OpenId
Einführung
Zend_OpenId_Consumer Grundlagen
Zend_OpenId_Provider
Zend_Paginator
Introduction
Usage
Configuration
Advanced usage
Zend_Pdf
Einführung
Erstellen und Laden von PDF Dokumenten
Änderungen von PDF Dokumenten speichern
Dokument Seiten
Zeichnen
Dokument Informationen und Metadaten
Anwendungsbeispiel für die Zend_Pdf Komponente
Zend_Registry
Die Registry verwenden
Zend_Rest
Einführung
Zend_Rest_Client
Zend_Rest_Server
Zend_Search_Lucene
Überblick
Indexerstellung
Einen Index durchsuchen
Abfragesprache
Abfrage Erzeugungs API
Zeichensätze
Erweiterbarkeit
Zusammenarbeit Mit Java Lucene
Erweitert
Die besten Anwendungen
Zend_Server
Einführung
Zend_Server_Reflection
Zend_Service
Einführung
Zend_Service_Akismet
Zend_Service_Amazon
Zend_Service_Audioscrobbler
Zend_Service_Delicious
Zend_Service_Flickr
Zend_Service_Nirvanix
Zend_Service_ReCaptcha
Zend_Service_Simpy
Einführung
Zend_Service_StrikeIron
Zend_Service_StrikeIron: Mitgelieferte Services
Zend_Service_StrikeIron: Erweiterte Verwendung
Zend_Service_Technorati
Zend_Service_Yahoo
Zend_Session
Einführung
Grundsätzliche Verwendung
Fortgeschrittene Benutzung
Globales Session Management
Zend_Session_SaveHandler_DbTable
Zend_Soap
Zend_Soap_Server
Zend_Soap_Client
WSDL Zugriffsmethoden
AutoDiscovery. Einführung
Automatische Erkennung von Klassen.
Funktionen für Autodiscovery.
Automatische Erkennung. Datentypen.
Zend_Test
Introduction
Zend_Test_PHPUnit
Zend_Text
Zend_Text_Figlet
Zend_TimeSync
Einführung
Arbeiten mit Zend_TimeSync
Zend_Translate
Einführung
Adapter für Zend_Translate
Benutzen von Übersetzungs Adaptoren
Zend_Uri
Zend_Uri
Zend_Validate
Einführung
Standard Prüfklassen
Kettenprüfungen
Schreiben von Prüfern
Zend_Version
Auslesen der Version des Zend Frameworks
Zend_View
Einführung
Controller Skripte
View Scripte
View Helfer
Zend_View_Abstract
Zend_Wildfire
Zend_Wildfire
Zend_XmlRpc
Einführung
Zend_XmlRpc_Client
Zend_XmlRpc_Server
Zend Framework Voraussetzungen
PHP Version
PHP Erweiterungen
Zend Framework Komponenten
Zend Framework Abhängigkeiten
Zend Framework Coding Standard für PHP
Übersicht
PHP Dateiformatierung
Namens Konventionen
Code Stil
Urheberrecht Informationen