2009-06-18 6 views
0

J'ai créé un Tokenizer personnalisé dans Solr qui recherche les entités nommées. Je voudrais pouvoir utiliser cette information pour remplir des champs séparés dans le document lucene/solr. Par exemple, je veux remplir un champ à plusieurs valeurs appelé «emplacements» avec tous les noms d'emplacement qui ont été extraits du texte. Pour extraire des emplacements, le texte est d'abord segmenté pour séparer les mots et déterminer quels sont les emplacements. Après ce processus, je voudrais émettre les jetons pour le tokenizer, mais aussi remplir les champs "emplacements" avec tous les noms d'emplacement qui ont été extraits du texte. De la recherche que j'ai faite, il n'y a aucun moyen d'accéder à l'objet SolrDocument à partir du Tokenizer ou du TokenizerFactory, donc il n'y a aucun moyen de remplir les champs d'ici.Solr: Remplir des champs séparés à partir d'un Tokenizer

La solution que j'ai trouvée jusqu'ici est de créer un UpdateRequestProcessorFactory personnalisé qui traite le texte et extrait les champs, puis le Tokenizer traite le texte AGAIN pour obtenir les jetons. Je voudrais trouver un moyen de faire ce travail et ne traiter le texte qu'une seule fois.

Répondre

1

La façon dont je le fais est moins élégant que ce qu'il ressemble à vous photographiez pour:

Je prétraiter les documents à l'aide d'une entité nommée et enregistrer toutes reconnaisseur des entités dans un fichier séparé. Ensuite, lorsque je publie sur Solr, je viens de lire les entités de ce fichier et de remplir les champs d'entité (différents pour les personnes, les emplacements et les organisations). Cela pourrait être simplifié, mais comme j'avais déjà effectué l'analyse pour d'autres travaux, il était plus facile de réutiliser ce qui existait déjà.

0

Voici une idée qui, je pense, fonctionnerait dans lucene, mais je ne sais pas si c'est possible dans solr. Vous pouvez marquer la chaîne en dehors de la chaîne tokenstream habituelle, comme vous le proposez, puis ajouter manuellement les jetons au document à l'aide de l'option NOT_ANALYZED. Vous devez ajouter chaque jeton séparément avec document.add (...) que Lucene traitera comme un seul champ de recherche.

Questions connexes