2010-10-12 15 views

Répondre

2

Ecrire une coutume Analyzer que soit divise ceux-ci en plusieurs jetons (JRB, 1000, relativement facile et pardonner aux utilisateurs) ou les concatène en un seul jeton (JRB1000, dur mais précis). L'implémentation de votre propre Analyzer permet de remplacer l'argument tokenStream dans un argument existant et peut-être d'écrire une classe personnalisée TokenFilter.

Appliquez votre nouveau Analyzer sur les deux documents indexés et requêtes.

(Les liens sont pour la version Java, mais .NET devraient être similaires.)

+0

Si votre analyseur simplement des espaces et supprime des tirets, et utilise ensuite ce qui reste que les jetons, il peut suffire. –

+0

"Suppression d'espaces" signifie un comportement par défaut (qui ne fonctionne pas) ou traiter tout comme un seul jeton. Ce sont les cas 'JRB1000' ->' JRB 1000' et vice versa qui causent le problème ici. (Sauf si le numéro de pièce est un champ distinct?) –

+0

Oui Le numéro de pièce est un champ séparé. J'ai réussi à obtenir ce principalement travailler avec un analyseur personnalisé et tokenizer qui supprime les espaces et les tirets et utilise le résultat comme le jeton. Cela fonctionne lors de la recherche de JRB1000 cependant, il ne fonctionne pas lors de la recherche de 'JRB 1000' malgré le passage de l'analyseur personnalisé dans le QueryParser. Je commence à penser que Lucene n'est peut-être pas le bon outil pour le travail ici, si tout ce qu'il fait est de dépouiller les espaces et les tirets de l'index et de la requête, je pourrais facilement le faire en ajoutant une table de recherche à ma base de données. – ChrisR