2009-10-19 8 views
3

Je suis à la recherche d'un moyen efficace d'indexer et de rechercher des champs numériques dans Lucene.Net. En ce moment, mon besoin est seulement pour les valeurs entières.Comment indexer des champs numériques et les rechercher par plage dans Lucene.Net?

Je souhaite effectuer une recherche par plage de valeurs (entre x et y, plus de x ...). En ce moment j'indexe le nombre tel quel et crée manuellement des clauses pour chaque valeur entre les deux valeurs, mais il génère rapidement beaucoup de clauses et atteint la limite par défaut (1024) quand je cherche une valeur entre 1000 et 5000, par exemple. Je suis sûr qu'il y a une meilleure façon de le faire ...

Répondre

6

Résolu avec un RangeQuery. Il peut également être fait avec l'analyseur de requête avec la syntaxe suivante:

FieldName:[startValue TO endValue] 

Gardez à l'esprit que la requête de gamme fonctionne sur les chaînes, de sorte que vos numéros doit être normalisé à la fois dans l'index et dans la requête. Dans mon cas j'ai normalisé à 5 chiffres avec .ToString ("00000"). Une manipulation spéciale serait nécessaire pour les nombres négatifs et les nombres décimaux, mais ce n'était pas un problème dans mon cas.

Questions connexes