2010-11-30 14 views
0

Salut: J'ai deux documents:recherche croix sur le terrain dans Lucene

title      body 
Lucene In Action   A high-performance, full-featured text search engine library. 
Lucene Practice    Use lucene in your application 

Maintenant, je recherche "performance Lucene" en utilisant

private String[] f = { "title", "body"}; 
private Occur[] should = { Occur.SHOULD, Occur.SHOULD}; 
Query q = MultiFieldQueryParser.parse(Version.LUCENE_29, "lucene performance", f, should,new IKAnalyzer()); 

Puis-je obtenir deux coups: « Lucene en action "et" Lucene Practice ".

Cependant, je ne pas veulent la "pratique Lucene" dans le résultat de la recherche. C'est-à-dire, je veux juste que les documents qui possèdent tous mes termes de recherche puissent être retournés, le "parc de lucene" ne contient pas le terme "performance", ainsi il ne devrait pas être retourné.

Des idées?

Répondre

2

Lucene ne peut pas correspondre à plusieurs champs. C'est-à-dire, pour la requête "a b", il ne correspondra pas "a" dans title et "b" dans body. Pour cela, vous devez créer un autre champ, par exemple, all_text, dont le titre et le corps sont indexés.

Aussi, lorsque vous recherchez "lucene performance" je suppose que vous recherchez des documents qui ont les deux termes - lucene ainsi que performance. Par défaut, l'opérateur booléen est OR. Vous devez spécifier l'opérateur par défaut AND pour correspondre à tous les termes de la requête. (Sinon, dans ce cas, la requête "performance lucene" commencera à renvoyer les correspondances qui parlent des performances de la base de données.)

+0

Pour la recherche de caractères anglais, vous avez raison. Et je cherche des moyens de résoudre les serching des caractères chinois. Merci quand même. – hguser