2011-06-20 2 views
1

J'ai un contenu d'article de nouvelles qui est en cours d'indexation en utilisant Lucene et interrogé en utilisant Zend_Lucene en PHP. Le contenu fait fréquemment référence aux chaînes de télévision britanniques (par exemple BBC One) mais je sais que nos utilisateurs entreront souvent un terme de recherche "BBC 1" ou "BBC1" plutôt que "BBC One".Comment gérer les nombres comme des mots et des nombres ("un" vs "1") dans Zend_Lucene

Existe-t-il une approche «standard» pour traiter ce problème de recherche de nombres-comme-mots plutôt que de nombres-comme-nombres? Mes choix semblent être de modifier le terme de recherche chaque fois que je vois des nombres, par exemple, je change un terme de recherche de "BBC1" en "BBC 1 One" (ou quelque chose de similaire) - ou je modifie le indexé contenu afin que les nombres soient convertis en mots et vice-versa et les deux versions stockées dans l'index.

Répondre

0

S'il vous plaît voir cette FAQ Lucene, il suggère d'utiliser un filtre jeton pour fournir alias/aliasing des mots:

26. How can I make 'pig' also match 'hog' ?:

Pour autant que je sache, Lucene ne fournit pas un tokenzier qui supporte le crénelage à terme, mais vous devriez être capable d'en écrire un vous-même. Tout ce dont vous avez besoin est d'écrire un TokenFilter qui accepte un mappage de paires de mots et l'utilise pour mapper le premier mot à la seconde.

Encore une fois, assurez-vous d'utiliser le même analyseur à la fois lors de l'indexation et la recherche et ne pas oublier de soumettre votre code au projet Lucene afin que d'autres peuvent l'utiliser aussi bien ;-)

C'est plus information probablement c'est encore plus confortable de nos jours, mais vaut probablement la peine.

Questions connexes