2 Stimmen

Wie kann ich in Zend Lucene das Feld ändern, in dem eine Abfrage sucht?

Ich versuche, eine "erweiterte Suche" zu erstellen, mit der ich den Benutzer nur bestimmte Felder meines Indexes durchsuchen lassen kann. Dazu verwende ich eine boolesche Abfrage:

$sq1 = Zend_Search_Lucene_Search_QueryParser::parse($field1); // <- provided by user
$sq2 = Zend_Search_Lucene_Search_QueryParser::parse($field2); // <- provided by user

$query = new Zend_Search_Lucene_Search_Query_Boolean();
$query->addSubquery($sq1, true);
$query->addSubquery($sq2, true);

$index->find($query);

Wie kann ich angeben, dass sq1 das Feld 'foo' und sq2 das Feld 'bar' durchsuchen soll?

Ich fühle mich wie ich die Abfragen anders für den Effekt analysieren sollte (weil der Benutzer in einen Feldnamen eingeben könnte), aber die Docs erwähnen nur die QueryParser für das Verbinden von Benutzer-Eingabe-Abfragen mit API-Abfragen.

1voto

Alex J Punkte 9475

Am einfachsten scheint es zu sein, die Benutzereingaben zu fälschen:

$sq1 = Zend_Search_Lucene_Search_QueryParser::parse("foo:($field1)");
$sq2 = Zend_Search_Lucene_Search_QueryParser::parse("bar:($field2)");

$field1 und $field2 sollten vorher von Klammern und Doppelpunkten befreit werden, um "search injection" zu vermeiden.

0voto

Matthijs Bierman Punkte 1695

Was Sie brauchen, ist die Abfragekonstruktions-API: http://www.zendframework.com/manual/en/zend.search.lucene.query-api.html#zend.search.lucene.queries.multiterm-query

Ich würde jedoch empfehlen, dass Sie Zend_Search_Lucene ganz fallen lassen. Die Java-Implementierung ist wunderbar, aber die PHP-Implementierung ist sehr schlecht. In Bezug auf das, was Sie zu tun versuchen, verhält sie sich sehr fehlerhaft, siehe Frage 1508748. Sie ist auch sehr, sehr langsam.

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