sdx-developers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sdx-developers] Commits du jour


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,

Martin Sevigny a écrit :

<WILDTERM:  (<_TERM_START_CHAR>| ( [ "*", "?" ] ))
            (<_TERM_CHAR> | ( [ "*", "?" ] ))* >

Est-ce à dire que :

"xa*?b*?c*?" ou "*abc" seraient mappés vers une WildcardQuery ?

Je ne sais pas, mais en tout cas si on ne faisait pas ce changement les
requêtes de type +eglise donnaient une belle NPE...

Euh...  en quoi "+eglise" devrait-il matcher WILDTERM ? Quelque chose m'échappe ici...

A+

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> | ( [ "*", "?" ] ))* >

reply via email to

[Prev in Thread] Current Thread [Next in Thread]