sdx-developers
[Top][All Lists]
Advanced

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

Re: RE : RE : [sdx-developers] Les queries


From: Pierrick Brihaye
Subject: Re: RE : RE : [sdx-developers] Les queries
Date: Thu, 11 Sep 2003 16:22:14 +0200
User-agent: Mozilla/5.0 (Windows; U; Win98; fr-FR; rv:1.0.2) Gecko/20030208 Netscape/7.02

Re,

Rasik Pandey a écrit:

<sdx:query type="field" engine="lucene" luceneQuery="alidade"
escapedLuceneQuery="alidade" text="alidade" escapedText="alidade"
field="contenu"/>

Les attributs "type" et "text" ne sont pas utiles?

En fait... si :-)

Prenons l'exemple d'une simpleQuery.

toit:|ciment en couverture|

<sdx:query type="simple" engine="lucene" luceneQuery="toit:ciment en couverture" escapedLuceneQuery="toit%3Aciment+en+couverture" text="toit:|ciment en couverture|" escapedText="toit%3A%7Cciment+en+couverture%7C" op="or"/>

La LuceneQuery ne m'intéresse pas (par reparsable), c'est text qui m'intéresse :-)

toit:ciment en couverture
<sdx:query type="simple" engine="lucene" luceneQuery="toit:ciment couverture" escapedLuceneQuery="toit%3Aciment+couverture" text="toit:ciment en couverture" escapedText="toit%3Aciment+en+couverture" op="or"/>

Même si luceneQuery est bonne, je préfère encore le texte :-)

Maintenant, une fieldQuery :

field=toit
value=ciment en couverture
<sdx:query type="field" engine="lucene" luceneQuery="ciment en couverture" escapedLuceneQuery="ciment+en+couverture" text="ciment en couverture" escapedText="ciment+en+couverture" field="toit"/>

Ici, à cause du toString("toit"), la LuceneQuery ne me convient pas. Le text non plus car, si on veut reparser, il faudrait les "|".

Bien sûr,
field=toit
value=|ciment en couverture| ne aucun résultat mais :
<sdx:query type="field" engine="lucene" luceneQuery="|ciment en couverture|" escapedLuceneQuery="%7Cciment+en+couverture%7C" text="|ciment en couverture|" escapedText="%7Cciment+en+couverture%7C" field="toit"/>

luceneQuery et text me conviennent.

Moralité : il suffirait de peu de choses pour que text soit bon tout le temps, ce qui veut dire que l'on peut se passer de LuceneQuery :-)

Plus sérieusement, entre une solution tout SDX (comme celle décrite plus haut) et une solution qui consisterait à patcher Lucene, il y a peut-être un juste milieu. Les données sont les suivantes :

Dans le QueryParser, on a :

1) la définition de "tokens insécables" :

| <STRING:     "|" (~["|"])+ "|">

2) le traitement de ces tokens :

| term=<STRING>
[ slop=<SLOP> ]
[ <CARAT> boost=<NUMBER> ]
{
  q = getStringQuery(field,
  term.image.substring(1, term.image.length()-1));
...

3) l'exploitation des tokens, considérés comme des termes, qui se fait naturellement grâce à une TermQuery.

private Query getStringQuery(String field, String queryText) {
  // check for nulls etc.
  return new TermQuery(new Term(field, queryText));
}

Il serait donc intéressant que TermQuery.toString() soit capable de retrouver le fait que le token soit insécable. Dans l'absolu, ce n'est pas compliqué : si, passé dans l'analyseur le token est coupé, c'est qu'il fauut ajouter des "|".

Ce qui me gêne dans cette affaire, c'est que l'on est obligé de mettre en communication TermQuery et le QueryParser. Des idées ?

A+

--
Pierrick Brihaye, informaticien
Service régional de l'Inventaire
DRAC Bretagne
mailto:address@hidden





reply via email to

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