2010-01-12 7 views
2

J'essaye de créer une "recherche avancée", où je peux laisser l'utilisateur rechercher seulement des champs spécifiques de mon index. Pour cela, j'utilise une requête booléenne:Dans Zend Lucene, comment changer le champ recherché par une requête?

$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); 

Comment puis-je préciser préciser que sq1 recherchera le champ « foo », et SQ2 cherchera « bar » terrain? Je pense que je devrais analyser les requêtes différemment pour l'effet (parce que l'utilisateur pourrait taper un nom de champ), mais les docs mentionnent seulement le QueryParser pour joindre des requêtes d'entrée d'utilisateur avec des requêtes d'API.

Répondre

1

Il semble que la façon la plus simple de le faire est juste pour truquer l'entrée utilisateur:

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

field1 $ et field2 $ devrait être retirée entre parenthèses et avance pour éviter côlons « recherche injection ».

+0

A travaillé comme par magie! – Randell

0

Ce que vous voulez est l'API de construction de requête: http://www.zendframework.com/manual/en/zend.search.lucene.query-api.html#zend.search.lucene.queries.multiterm-query

Cependant, je recommande que vous laissez tomber Zend_Search_Lucene tout à fait. L'implémentation de Java est merveilleuse, mais l'implémentation de PHP est très mauvaise. En ce qui concerne ce que vous essayez de faire, il se comporte très bogué, voir la question 1508748. C'est aussi très, très lent.

+0

Le problème est que l'API n'explique pas comment faire cela. Comment obtenir l'entrée de l'utilisateur et la transformer en une requête multiterm sans la marquer manuellement? Je me rends compte qu'un moteur de recherche PHP n'est pas une bonne idée, mais je suis à la recherche de la facilité de mise en œuvre dès maintenant et je vais migrer si cela devient un problème plus tard. –

+0

Dans ce cas, il semble que vous n'avez pas d'autre choix que d'utiliser la solution fournie par Ilia Jerebtsov. Encore une fois, sachez que l'implémentation PHP est très lente. Vous avez toujours le choix d'utiliser un autre cadre de recherche. Je vous suggère fortement de le faire. –

Questions connexes