2009-01-10 6 views
0

J'ai un champ "description" indexé dans Lucene.Ce champ contient la description d'un livre. Comment puis-je obtenir la fonctionnalité "Tous ces mots" dans ce champ en utilisant la classe BooleanQuery? Par exemple, si un utilisateur tape "livre le plus vendu", il devrait retourner les livres qui ont tous ces mots dans sa description.Tous ces mots disposent

Merci!

Répondre

1

Il y a deux morceaux pour obtenir ce travail:

  1. Vous avez besoin des documents entrants à analyser correctement, de sorte que les mots individuels sont en jetons et indexées séparément
  2. La requête utilisateur doit être en jetons, et les jetons combinés avec l'opérateur AND.

Pour # 1, il y a un certain nombre de Analyzers et tokenizers que come with Lucene - un coup d'oeil dans le paquet org.apache.lucene.analysis. Il y a des options pour beaucoup de langues différentes, stemming, mots d'arrêt et ainsi de suite. Pour le n ° 2, il existe de nombreux analyseurs de requêtes fournis avec Lucene, principalement dans le package org.apache.lucene.queryParser. MultiFieldQueryParser pourrait être bon pour vous: à besoin chaque terme d'être présent, il suffit d'appeler

QueryParser.setDefaultOperator(QueryParser.AND_OPERATOR) 

Lucene in Action, bien que quelques anciennes versions, est toujours précise et extrêmement utile pour plus d'informations sur l'analyse et l'analyse des requêtes.

0

Je crois que si vous ajoutez toutes les parties de la requête (un par trimestre) par l'intermédiaire

BooleanQuery.add(Query, BooleanClause.Occur) 

et de définir ce second paramètre à la BooleanClause.Occur.MUST constante, alors vous devriez obtenir ce que vous voulez. La syntaxe de requête équivalente serait "+ term1 + term2 + term3 ...".

Questions connexes