sdx-developers
[Top][All Lists]
Advanced

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

[sdx-developers] QueryParser... encore


From: Pierrick Brihaye
Subject: [sdx-developers] QueryParser... encore
Date: Thu, 18 Sep 2003 17:47:26 +0200

Salut,

J'avais prévu de vous reparler du queryParser, mais pas aussi tôt :-)

Voilà mon problème ; je dois avouer que les fichiers JavaCC, ce n'est pas ma
tasse de thé mais bon, la partie qui me tracesse est en pur Java.

protected Query getFieldQuery(String field,
                              Analyzer analyzer,
                              String queryText) {
  // Use the analyzer to get all the tokens, and then build a TermQuery,
  // PhraseQuery, or nothing based on the term count

  TokenStream source = analyzer.tokenStream(field,
                                            new StringReader(queryText));
  Vector v = new Vector();
  org.apache.lucene.analysis.Token t;

  while (true) {
    try {
      t = source.next();
    }
    catch (IOException e) {
      t = null;
    }
    if (t == null)
      break;
    v.addElement(t.termText());
  }
  if (v.size() == 0)
    return null;
  else if (v.size() == 1)
    return new TermQuery(new Term(field, (String) v.elementAt(0)));
  else {
    PhraseQuery q = new PhraseQuery();
    q.setSlop(phraseSlop);
    for (int i=0; i<v.size(); i++) {
      q.add(new Term(field, (String) v.elementAt(i)));
    }
    return q;
  }
}

Si je comprends bien, en fonction du nombre de tokens, on construit :
a) rien :-)
b) une termQuery
c) une phraseQuery

Cette logique est implacable... tant que le positionIncrement des tokens est
égal à 1 ou, à tout le moins, différent de 0.

Je travaille sur un tokenizer qui, pour un token en entrée, peut en renvoyer
N en sortie. Evidemment, ces N tokens ont les mêmes offsets que le token
d'entrée. La seule différence, c'est que le premier a un positionIncrement
de 1 (cas standard) et les autres un positionIncrement de 0.

Cela me permet, pour un token qui serait par exemple "ordre", de sortie
"ordre" (nom), "ordonner" (verbe), "ordonné" (adjectif)... Bref, on
lemmatise.

Tel que rédigé, le queryParser me crée donc des phraseQuery alors que je
voudrais des termQuery combinées pour les termes ayant un positionIncrement
de 0 ou, peut-être une MultiTermQuery dont m'usage m'est moins familier.
Comme pensez-vous que le problème puisse être résolu ?

A+

p.b.


















reply via email to

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