Recherche avec et sans espaces

2013-11-04 Thread Antoine REBOUL
Bonjour,

je souhaite faire en sorte que les recherches dans un champs de type texte
renvoient des résultats même si les espaces sont mal saisies
(par exemple : la redoute=laredoute).

Aujourd'hui mon champ texte est défini de la façon suivante :


fieldType name=text class=solr.TextField positionIncrementGap=100
 analyzer type=index
tokenizer class=solr.WhitespaceTokenizerFactory/
 filter class=solr.ISOLatin1AccentFilterFactory/
filter class=solr.StopFilterFactory
 ignoreCase=true
words=stopwords.txt
enablePositionIncrements=true
 /
filter class=solr.ElisionFilterFactory articles=elisions.txt/
 filter class=solr.SynonymFilterFactory synonyms=synonyms2.txt
ignoreCase=true expand=false/
filter class=solr.ASCIIFoldingFilterFactory/
 filter class=solr.WordDelimiterFilterFactory
generateWordParts=1
generateNumberParts=1
 catenateWords=1
catenateNumbers=1
catenateAll=1
 splitOnCaseChange=1
splitOnNumerics=1
preserveOriginal=1
 /
filter class=solr.LowerCaseFilterFactory/
/analyzer
 analyzer type=query
filter class=solr.ISOLatin1AccentFilterFactory/
 tokenizer class=solr.WhitespaceTokenizerFactory/
filter class=solr.WordDelimiterFilterFactory
 generateWordParts=1
generateNumberParts=1
catenateWords=1
 catenateNumbers=0
catenateAll=1
splitOnCaseChange=1
 preserveOriginal=1
/
filter class=solr.StopFilterFactory
 ignoreCase=true
words=stopwords.txt
enablePositionIncrements=true
 /
filter class=solr.ElisionFilterFactory articles=elisions.txt/
 filter class=solr.ASCIIFoldingFilterFactory/
filter class=solr.LowerCaseFilterFactory/
 filter class=solr.RemoveDuplicatesTokenFilterFactory/
/analyzer
/fieldType






Merci d'avance pour vos éventuelles réponses.
Cordialement.

Antoine Reboul
*


RE: Recherche avec et sans espaces

2013-11-04 Thread Jean-Sebastien Vachon
Bonjour Antoine,

Je ne vois que 2 solutions à ton problème.

1) utilisation de synonymes mais tu seras limités au cas connus d'avance 
seulement alors c'est une solution qui ne scale pas à long terme.

2) sinon tu dois envisager d'avoir un deuxième champ (probablement en 
CopyField) qui n'utilisera pas un WhitespaceTokenizer (la classe 
KeywordTokenizerFactory semble un bon candidat) et faire la recherche sur les 2 
champs (fq=champ1:la redoute OR champ2:la redoute)

La page d'administration (/solr/admin/analysis.jsp) te permet de bien voir ce 
qui se passe pour différentes valeurs et champs.

De plus, tu auras beaucoup plus de chance d'obtenir des réponses à tes 
questions si celles-ci sont rédigées en anglais. ;)

Bonne chance

 -Original Message-
 From: Antoine REBOUL [mailto:antoine.reb...@gmail.com]
 Sent: November-04-13 11:42 AM
 To: solr-user@lucene.apache.org
 Subject: Recherche avec et sans espaces
 
 Bonjour,
 
 je souhaite faire en sorte que les recherches dans un champs de type texte
 renvoient des résultats même si les espaces sont mal saisies (par exemple : 
 la
 redoute=laredoute).
 
 Aujourd'hui mon champ texte est défini de la façon suivante :
 
 
 fieldType name=text class=solr.TextField positionIncrementGap=100
 analyzer type=index tokenizer class=solr.WhitespaceTokenizerFactory/
  filter class=solr.ISOLatin1AccentFilterFactory/
 filter class=solr.StopFilterFactory
  ignoreCase=true
 words=stopwords.txt
 enablePositionIncrements=true
  /
 filter class=solr.ElisionFilterFactory articles=elisions.txt/  filter
 class=solr.SynonymFilterFactory synonyms=synonyms2.txt
 ignoreCase=true expand=false/
 filter class=solr.ASCIIFoldingFilterFactory/
  filter class=solr.WordDelimiterFilterFactory
 generateWordParts=1
 generateNumberParts=1
  catenateWords=1
 catenateNumbers=1
 catenateAll=1
  splitOnCaseChange=1
 splitOnNumerics=1
 preserveOriginal=1
  /
 filter class=solr.LowerCaseFilterFactory/
 /analyzer
  analyzer type=query
 filter class=solr.ISOLatin1AccentFilterFactory/
  tokenizer class=solr.WhitespaceTokenizerFactory/
 filter class=solr.WordDelimiterFilterFactory
  generateWordParts=1
 generateNumberParts=1
 catenateWords=1
  catenateNumbers=0
 catenateAll=1
 splitOnCaseChange=1
  preserveOriginal=1
 /
 filter class=solr.StopFilterFactory
  ignoreCase=true
 words=stopwords.txt
 enablePositionIncrements=true
  /
 filter class=solr.ElisionFilterFactory articles=elisions.txt/  filter
 class=solr.ASCIIFoldingFilterFactory/
 filter class=solr.LowerCaseFilterFactory/
  filter class=solr.RemoveDuplicatesTokenFilterFactory/
 /analyzer
 /fieldType
 
 
 
 
 
 
 Merci d'avance pour vos éventuelles réponses.
 Cordialement.
 
 Antoine Reboul
 *
 
 -
 Aucun virus trouvé dans ce message.
 Analyse effectuée par AVG - www.avg.fr
 Version: 2014.0.4158 / Base de données virale: 3615/6784 - Date: 26/10/2013
 La Base de données des virus a expiré.


Re: Recherche avec et sans espaces

2013-11-04 Thread Roman Chyla
Hi Antoine,
I'll permit myself to respond in English, cause my written French is
slower;-)
Your problem is a well known amongst Sold users, the query parser splits
tokens by empty space, so the analyser never sees input 'la redoutte' but
it receives 'la' 'reroute'. You can of course enclose your search in quotes
like ”la redoutte but it is hard to force your users to do the sameI
have solved this and related problems for our astrophysics system by
writing a better query parser that does search both for individual tokens
and for phrases, so essentially the parser decides when to join tokens
together - and this takes care also of multi-token synonyms, because
synonym recognition is related issue, it happens in the analysis phase, and
that one comes after parsing. The code is there in lucene-5014 and I'll
perhaps make it available as a simple jar that you can drop inside solr,
but impossible to do sion, it is too busy But I hope the explanation
will help you to search for a solution, you need to make sure that your
analysis chain sees 'la redoutte' and then, because you are using
whitespace tokenizer, you need to define the synonyms laredoutte,la\
redoutte

Hth

Roman
On 4 Nov 2013 11:48, Antoine REBOUL antoine.reb...@gmail.com wrote:

 Bonjour,

 je souhaite faire en sorte que les recherches dans un champs de type texte
 renvoient des résultats même si les espaces sont mal saisies
 (par exemple : la redoute=laredoute).

 Aujourd'hui mon champ texte est défini de la façon suivante :


 fieldType name=text class=solr.TextField positionIncrementGap=100
  analyzer type=index
 tokenizer class=solr.WhitespaceTokenizerFactory/
  filter class=solr.ISOLatin1AccentFilterFactory/
 filter class=solr.StopFilterFactory
  ignoreCase=true
 words=stopwords.txt
 enablePositionIncrements=true
  /
 filter class=solr.ElisionFilterFactory articles=elisions.txt/
  filter class=solr.SynonymFilterFactory synonyms=synonyms2.txt
 ignoreCase=true expand=false/
 filter class=solr.ASCIIFoldingFilterFactory/
  filter class=solr.WordDelimiterFilterFactory
 generateWordParts=1
 generateNumberParts=1
  catenateWords=1
 catenateNumbers=1
 catenateAll=1
  splitOnCaseChange=1
 splitOnNumerics=1
 preserveOriginal=1
  /
 filter class=solr.LowerCaseFilterFactory/
 /analyzer
  analyzer type=query
 filter class=solr.ISOLatin1AccentFilterFactory/
  tokenizer class=solr.WhitespaceTokenizerFactory/
 filter class=solr.WordDelimiterFilterFactory
  generateWordParts=1
 generateNumberParts=1
 catenateWords=1
  catenateNumbers=0
 catenateAll=1
 splitOnCaseChange=1
  preserveOriginal=1
 /
 filter class=solr.StopFilterFactory
  ignoreCase=true
 words=stopwords.txt
 enablePositionIncrements=true
  /
 filter class=solr.ElisionFilterFactory articles=elisions.txt/
  filter class=solr.ASCIIFoldingFilterFactory/
 filter class=solr.LowerCaseFilterFactory/
  filter class=solr.RemoveDuplicatesTokenFilterFactory/
 /analyzer
 /fieldType






 Merci d'avance pour vos éventuelles réponses.
 Cordialement.

 Antoine Reboul
 *