2009-03-19 7 views
1

Voici ce que je veux faire, en utilisant un pseudo-code:recherche Lucene avec requête complexe

lucene.Find((someField == "bar" || someField == "baz") && anotherField == "foo"); 

ou en anglais, « trouver tous les documents où somefield est 'bar' ou 'baz', et où anotherField est 'foo' ".

Comment puis-je faire une requête comme celle-ci avec Lucene?

Répondre

5

Dans Lucene syntaxe de requête:

+(someField:bar someField:baz) +anotherField:foo 

Le "+" signifie que le terme est nécessaire, tout comme Google syntaxe de recherche. Les parenthèses regroupent les termes pour agir comme un seul terme. Sans "+" (ou "-"), un terme est facultatif; Au moins un des termes doit correspondre, et plus les termes correspondent, plus le score est élevé.

Transmettez cette chaîne au QueryParser pour créer un objet Query. La requête peut ensuite être transmise à l'une des méthodes de recherche, en fonction de vos besoins.

+0

Merci! Je vais essayer. En attendant, je vais marquer cela comme la bonne réponse. Je vous ferai savoir si cela fonctionne comme prévu. –

+0

Cela semble bien fonctionner. Merci encore. –