2009-09-15 7 views
2

Vous cherchez des conseils sur la manipulation des esperluettes et le mot "et" dans les requêtes Lucene. Mes requêtes de test sont (y compris les guillemets):Lucene.NET - Recherche de phrase contenant "et"

  • "champ pétrolier et gazier" (phrase complète)
  • "recherche et développement" (phrase complète)
  • "r & d" (phrase complète)

Idéalement, je voudrais utiliser le QueryParser car l'entrée provient de l'utilisateur.

Lors des tests et de la lecture de doc, j'ai trouvé que l'utilisation du StandardAnalyzer ne fonctionne pas pour ce que je veux. Pour les deux premières requêtes, un QueryParser.Parse les convertit à:

contents:"oil gas field" 
contents:"research development" 

Ce qui est pas ce que je veux. Si j'utilise un lieu PhraseQuery, je reçois aucun résultat (probablement parce que « et » n'est pas indexé

Si j'utilise un SimpleAnalyzer, alors je peux trouver les phrases mais QueryParser.Parse convertit le dernier terme.

contents:"r d" 

ce qui encore une fois, est pas tout à fait ce que je cherche.

Un conseil?

Répondre

3

si vous voulez rechercher « et » vous devez l'indexer. Écrivez vous possédez Analyzer ou supprimer " et "de la liste des mots d'arrêt. ame s'applique au "r & d". Écrivez votre propre analyseur qui crée 3 mots à partir du texte: "r", "d", "r & d".

3

Première étape de travail avec Lucene est d'accepter que pratiquement tout le travail est effectué au moment de l'indexation. Si vous voulez chercher quelque chose, vous l'indexez. Si vous voulez ignorer quelque chose, vous ne l'indexez pas. C'est ce qui permet à Lucene de fournir une telle recherche à grande vitesse. En conséquence, pour qu'un index fonctionne efficacement, vous devez anticiper ce que votre analyseur doit faire à l'avance. Dans ce cas, j'écrirais mon propre analyseur qui ne supprime aucun mot d'arrêt et transforme également & en 'et' (et en option @ à 'at' etc.). Dans le cas de r & d recherche correspondant à & développement, vous devrez certainement mettre en œuvre une certaine logique de domaine spécifique.

Il existe d'autres façons de gérer cela. Si vous pouvez différencier les recherches d'expressions et les recherches par mot-clé normales, il n'y a aucune raison de ne pas pouvoir gérer deux ou plusieurs index pour gérer différents types de recherche. Cela donne une recherche très rapide mais nécessitera plus de maintenance.

Une autre option consiste à utiliser la haute vitesse de Lucene pour filtrer vos résultats initiaux vers quelque chose de plus gérable en utilisant un analyseur qui ne donne pas de faux négatifs. Vous pouvez ensuite exécuter un filtrage détaillé sur le texte intégral des documents qu'il trouve pour faire correspondre les phrases correctes. En fin de compte je pense que vous allez trouver que Lucene sacrifie la précision dans les recherches plus avancées afin de fournir de la vitesse, il est généralement assez bon pour la plupart des gens. Vous êtes probablement dans des eaux inexplorées en essayant de modifier votre analyseur autant.

Questions connexes