2008-09-15 9 views
1

J'ai trouvé comment trier les résultats d'une requête par un champ donné dans un index Lucene.Net plutôt que par score; tout ce qu'il faut, c'est un champ qui est indexé mais pas tokenized. Cependant, ce que je n'ai pas réussi à comprendre est comment trier ce champ en ignorant les mots d'arrêt tels que "a" et "the", de sorte que les titres de livres suivants, par exemple, trieraient dans l'ordre croissant comme suit:Comment trier par champ Lucene.Net et ignorer les mots d'arrêt communs tels que «a» et «le»?

  1. le chat dans le chapeau
  2. Horton Hears a Who

une telle chose est possible, et si oui, comment? Je utilise Lucene.Net 2.3.1.2.

Répondre

1

J'enveloppe les résultats retournés par Lucene dans ma propre collection d'objets personnalisés. Ensuite, je peux le remplir avec des informations supplémentaires sur le contexte (et utiliser des choses comme la classe des surligneurs pour extraire un extrait des correspondances), plus ajouter la pagination. Si vous avez emprunté une route similaire, vous pouvez créer une classe/un objet "résultat", ajouter quelque chose comme une propriété SortBy et saisir le champ que vous souhaitez trier, supprimer tous les mots vides, puis l'enregistrer dans cette propriété. Maintenant, il suffit de trier la collection basée sur cette propriété à la place.

+0

Je pense que c'est comme ça que ça doit être fait, oui. Je crée une collection d'objets personnalisés avec les résultats de Lucene, donc ça ne devrait pas être trop dur. Merci. – Peaeater

0

Lorsque vous créez votre index, créez un champ contenant uniquement les mots que vous souhaitez trier, puis lors de la récupération, triez sur ce champ mais affichez le titre complet.

+0

Eh bien, c'est le truc, non? Vous ne pouvez pas trier par un champ à jetons, et c'est la tokenizing qui analyse le champ pour les mots d'arrêt et la ponctuation, tel que je le comprends. Alors, comment supprimer ces mots d'arrêt mais garder le champ non segmenté? – Peaeater

+0

Dans votre code, supprimez les mots d'arrêt. Vous devrez maintenir votre propre liste. –

0

Cela fait un moment que j'ai utilisé Lucene mais je pense que je devrais ajouter un champ supplémentaire pour trier et stocker la valeur là-dedans avec les mots d'arrêt déjà dépouillés. Vous pouvez probablement utiliser les mêmes analyseurs pour générer cette valeur.

0

Il semble y avoir un piège à 22 en ce sens que vous devez marquer un champ avec un analyseur pour supprimer la ponctuation et arrêter les mots, mais vous ne pouvez pas trier sur les champs à jetons. Comment alors se débarrasser des mots d'arrêt sans les marquer?

+1

Ne comptez pas sur Lucene pour les dépouiller, faites-le vous-même. –