|
From: | Joran Le Cren |
Subject: | Re: [sdx-developers] Commits du jour |
Date: | Mon, 23 Aug 2004 13:40:12 +0200 |
User-agent: | Mozilla Thunderbird 0.7 (Windows/20040616) |
Bonjour, Pierrick Brihaye wrote: Salut,Je vais détailler un peu le problème. Avant mon dernier commit, le token WILDTERM était ainsi : | <WILDTERM: (<_TERM_CHAR> | ( [ "*", "?" ] ))* > Le problème avec cette regexp est qu'elle accepte les chaines du style : +eglise, or ceci n'est pas un wildterm (d'ailleurs Lucene n'aime pas du tout --> NPE). Cette chaine devrait provoquer un évènement PLUS puis un TERM. La regexp suivante règle le problème : | <WILDTERM: <_TERM_START_CHAR> (<_TERM_CHAR> | ( [ "*", "?" ] ))* > Cependant, cette regexp pose un nouveau problème. Les chaines commençant par * ou par ? ne sont plus reconnues en tant que wildterm (à cause de l'exclusion par _TERM_START_CHAR ). D'où l'ajout : | <WILDTERM: (<_TERM_START_CHAR> | ( [ "*", "?" ] )) (<_TERM_CHAR> | ( [ "*", "?" ] ))* > qui résoud les deux problèmes précédents. Non seulement xa*?b*?c*? est acceptée par les ' 3 ' regexp mais aussi xa**?****dfdf**?**?**dqsd*??? ;o). C'est à Lucene de gérer ce cas de figure (à tester quand même ;-)). Quant à *abc, elle est acceptée par la première et dernière regexp et elle fonctionne. Le test a été fait sur sdxtest avec une requête du type: *nuaire qui renvoie "Annuaire". La chaine: +*lise est acceptée par la dernière regexp et fonctionne également. Reste un petit problème que je viens de remarquer en écrivant ces lignes. La chaine: * , est acceptée par la première et la dernière regexp. Est-ce que c'est un comportement normal ou est-ce qu'il ne faudrait pas agir au niveau de la signification de ce terme dans les fonctions JAVA du QueryParser? Et que penser vous de ça (au moins un caractère qui n'est pas * ou ?): | <WILDTERM: [ "*", "?" ] * <_TERM_START_CHAR> (<_TERM_CHAR> | ( [ "*", "?" ] ))* > Bon, je vais arrêter là. :-) NB: J'ai bien noter les modifications à faire ZeroPositionIncrementTokenQueryParser.jj (QueSaQuo???) mais j'ai des petits problèmes de commit. Je vais essayer de faire ça dans la journée. <*> TOKEN : { <#_NUM_CHAR: ["0"-"9"] > | <#_ESCAPED_CHAR: "\\" [ "\\", "+", "-", "!", "(", ")", ":", "^", "[", "]", "\"", "{", "}", "~", "*", "?" ] > | <#_TERM_START_CHAR: ( ~[ " ", "\t", "\n", "\r", "+", "-", "!", "(", ")", ":", "^", "[", "]", "\"", "{", "}", "~", "*", "?" ] | <_ESCAPED_CHAR> ) > | <#_TERM_CHAR: ( <_TERM_START_CHAR> | <_ESCAPED_CHAR> | "-" | "+" ) > | <#_WHITESPACE: ( " " | "\t" | "\n" | "\r") > } // OG: to support prefix queries: // http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12137 // Change from: // | <WILDTERM: <_TERM_START_CHAR> // (<_TERM_CHAR> | ( [ "*", "?" ] ))* > // To: // // | <WILDTERM: (<_TERM_CHAR> | ( [ "*", "?" ] ))* > // It seems that the last regexp doesn't allow queries like : +term <DEFAULT> TOKEN : { ... | <PLUS: "+" > ... | <TERM: <_TERM_START_CHAR> (<_TERM_CHAR>)* > ... | <WILDTERM: (<_TERM_START_CHAR>| ( [ "*", "?" ] )) (<_TERM_CHAR> | ( [ "*", "?" ] ))* > |
[Prev in Thread] | Current Thread | [Next in Thread] |