2010-09-10 20 views
1

Certains documents stockés dans Lucene contiennent des champs contenant des chemins de fichier ou des URI. J'aimerais que les utilisateurs puissent récupérer ces documents si leurs termes de requête contiennent un chemin ou un segment d'URI.Indexation de chemins de fichier ou d'URI dans Lucene

Par exemple, si le chemin est

C:\home\user\research\whitepapers\analysis\detail.txt 

J'aimerais l'utilisateur d'être en mesure de le trouver par queriying pour path:whitepapers.

De même, si l'URI est

http://www.stackoverflow.com/questions/ask 

Une requête contenant uri:questions serait le récupérer. Dois-je utiliser un analyseur spécial pour ces champs, ou est-ce que StandardAnaylzer fera le travail? Aurai-je besoin de faire un pré-traitement de ces champs? (Pour remplacer les barres obliques ou les barres obliques inversées par des espaces, par exemple?)

Suggestions bienvenues!

Répondre

0

Vous pouvez utiliser StandardAnalyzer. J'ai testé cela, en ajoutant la fonction suivante à TestStandardAnalyzer.java de Lucene:

public void testBackslashes() throws Exception { 
    assertAnalyzesTo(a, "C:\\home\\user\\research\\whitepapers\\analysis\\detail.txt", new String[]{"c","home", "user", "research","whitepapers", "analysis", "detail.txt"}); 
    assertAnalyzesTo(a, "http://www.stackoverflow.com/questions/ask", new String[]{"http", "www.stackoverflow.com","questions","ask"}); 

}

Ce test unitaire passé en utilisant Lucene 2.9.1. Vous pouvez essayer avec votre distribution Lucene spécifique. Je suppose qu'il fait ce que vous voulez, tout en gardant les noms de domaine et les noms de fichiers ininterrompus. Ai-je mentionné que j'aime les tests unitaires?

+0

Merci! L'utilisation de StandardAnalyzer pour indexer les segments de chemin fonctionne également dans Lucene.Net 2.4.0. – dthrasher

+0

Connaissez-vous un Lucene Analyzer prêt à l'emploi qui séparerait le nom de domaine en «points» ou séparerait le nom de fichier de son extension? – dthrasher

+0

Peut-être que vous pouvez utiliser LetterTokenizer http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/analysis/LetterTokenizer.html chaîné avec un filtre. LetterTokenizer divise le texte en non-lettres. –