2010-12-08 39 views
1

Nous avons récemment ajouté le support Lucene (2.4.1) à notre application qui a fonctionné avec Jackrabbit (1.6.2). Nous avons fait tout comme il a été décrit dans le tutoriel jackrabbit. Et tout fonctionne presque bien. Mais j'ai remarqué un comportement étrange et je ne trouve aucun document à ce sujet. J'ai décidé de vous poser des questions à ce sujet.Lucene Jackrabbit

Par exemple: je le texte suivant dans le nœud (RJC: contenu) en JCR: propriété data

The quick brown fox jumps over the lazy dog 
[email protected]#$%^& 
travmik! 
tra!vmik 

Ma requête XPath est la suivante:

String query = "root/element(*,my:documentBody) 
         [jcr:contains(*/*/element(*),'*" + param +"*')]"; 

J'essayer de chercher:

«q», «qu», «qui», «quic», «rapide», «k», «ck», «ick», «uick», «renard brun rapide», «renard rapide» , "tra", "travmik", "mik" - tous trouvés ok

"! Tra vmik" 10

, "travmik!", "@ # $!" - rien

Et, oui je me suis évadé tous les caractères spéciaux de this.

Qu'est-ce que j'ai fait de mal?

P.s. J'ai encore une question - dans Lucene docs dit que "Vous ne pouvez pas utiliser un symbole * ou? Comme le premier caractère d'une recherche", mais j'utilise et cela fonctionne. Pourquoi?

Répondre

0

J'ai trouvé le problème. Ce fut un malentendu avec Extracteurs qui sont utilisés dans jackrabbit pour l'indexation du contenu. Je ne veux pas entrer dans les détails, mais peux dire que ce morceau de code de l'un des Extracteurs est la cause de tous mes problèmes:

if (!Character.isLetterOrDigit(c)) { 
    if (!space) { 
     space = true; 
     buffer.append(' '); 
     continue; 
    } 
    continue; 
} 

Si quelqu'un est intéressé par cela - je peux expliquer plus en détail .