Comment puis-je combiner les deux Lucene requêtes à l'aide de OU?

J'aimerais à la recherche de mon index sur les deux champs "a" et "b". Je me suis donnée des recherches comme Freud -- theories of psychology et j'aimerais effectuer la requête suivante:

(a="Freud" AND b="theories of psychology") OR (b="Freud" AND a="theories of psychology")

Comment dois-je faire? Jusqu'à présent j'ai Lucene construction de deux moitiés (firstHalf et secondHalf) à l'aide de MultiFieldQueryParser, puis je l'ai combiné avec

BooleanQuery combined = new BooleanQuery();
combined.add(firstHalf, BooleanClause.Occur.SHOULD);
combined.add(secondHalf, BooleanClause.Occur.SHOULD);

Mais combined des résultats permet d'être renvoyé où seuls les "théories" et non pas "psychologie", où je veux absolument les deux termes. Il semble que Lucene est le fractionnement des théories de la psychologie" en trois mots et de les combiner individuellement, avec OU. Comment puis-je éviter cela?

firstHalf ressemble:

Query firstHalf = MultiFieldQueryParser.parse(Version.LUCENE_33,
         new String[]{"Freud", "theories of psychology"},
         new String[]{"a", "b"},
         new BooleanClause.Occur[]{BooleanClause.Occur.MUST, BooleanClause.Occur.MUST},
         analyzer);

analyzer est juste un StandardAnalyzer objet.

A juste dit que Lucene ne prend pas en charge la logique Booléenne comme ça, et qui DEVRAIT != OU. Dans ce cas, Lucene en Action 2e Édition est mauvais à la page 95. 🙂 Alors maintenant je sais pourquoi ma requête est cassé, juste ne sais pas comment le corriger encore.
Êtes-vous sûr que la requête est correcte? La requête theories of psychology signifie qu'au moins l'un des trois mots doit se produire quelque part, mais aucun d'eux est un mot requis.
Nope, j'ai dû le modifier pour mettre cette restriction. Je pense que je l'ai eu. 🙂

OriginalL'auteur dmn | 2011-11-23