2010-05-27 3 views
1

Je dois indexer beaucoup de documents qui contiennent des numéros de référence comme "aaa.bbb.ddd-fff". La structure peut changer mais c'est toujours des nombres arbitraires ou des caractères combinés avec "/", "-", "_" ou un autre délimiteur.Comment indexer une chaîne comme "aaa.bbb.ddd-fff" dans Lucene?

Les utilisateurs veulent être en mesure de rechercher l'une des sous-chaînes comme "aaa" ou "ddd" et aussi pour des combinaisons comme "aaa.bbb" ou "ddd-fff". Le mieux que j'ai pu trouver est de créer mon propre filtre de jetons modélisé d'après le filtre de synonymes dans "Lucene in action" qui crache plusieurs termes pour chaque entrée. Dans mon cas, je retourne "aaa.bbb", "bbb.ddd", "bbb.ddd-fff" et toutes les autres combinaisons des sous-chaînes. Cela fonctionne plutôt bien mais quand j'indexe de grands documents (100MB) qui contiennent beaucoup de telles chaînes j'ai tendance à avoir des exceptions de mémoire car mon filtre renvoie plusieurs termes pour chaque chaîne d'entrée.

Existe-t-il un meilleur moyen d'indexer ces chaînes?

Répondre

0

je voudrais essayer de construire un filtre de jeton que:

  1. Extraits jetons délimité par les délimiteurs, par exemple aaa, bbb, ddd, fff.
  2. Extrait les délimiteurs en tant que jetons distincts.
  3. Peut-être ajoute un jeton de séparateur pour empêcher les correspondances entre les nombres.

Pour la requête, je voudrais d'abord essayer une requête booléenne avec des termes SHOULD. Si cela donne trop de faux positifs, je changerais cela en MUST. Si c'est encore trop, j'essaierais un PhraseQuery.

Questions connexes