IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tomcat et TomEE Java Discussion :

Solr - indexation terme entrecoupé par des balises xml


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut Solr - indexation terme entrecoupé par des balises xml
    Bonjour,
    Remarque: je ne suis pas sûre que cette section soit la bonne pour poser une question sur solr; mais je n'ai pas trouvé mieux (n'hésitez pas à déplacer cette discussion si nécessaire, merci)

    J'ai des fichiers xml dans une base Exist-db qui sont indexés par Solr.
    Ceux-ci ressemblent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <label dbp:hand="GF-encre">
                        <term rend="underline">Monarchie</term>.</label>
                    <item>
                        <list>
                            <item type="fragment" n="3">
                                <cit dbp:hand="GF-encre">
                                    <quote>si les <hi rend="underline">ruches d’<term>abeilles</term>
                                        </hi> prouvent la
                      monarchie, les fourmillières, les troupes d’éléphants ou de <lb/>
                                        <choice>
                                            <orig>C</orig>
                                            <reg>c</reg>
                                        </choice>astors prouvent la république.</quote>
                                    <bibl xml:id="b-7468-3"/>
                                </cit>
                            </item>
                            <item type="fragment" n="4">
                                <cit dbp:hand="GF-encre">
                                    <quote>- La Monarchie a son type dans le Pouvoir<note type="DBP-footnote">"pouvoir"
                        dans l’ouvrage de Block (t. II, p. 327).</note> paternel <choice>
                                            <orig>
                                                <c>&amp;</c>
                                            </orig>
                                            <reg>et</reg>
                                        </choice> dans le <choice>
                                            <abbr>Commandemt</abbr>
                                            <expan>Commandem<ex>en</ex>t</expan>
                                        </choice>
                                        <note type="DBP-footnote">"commandement" dans l’ouvrage de Block (t. II,
                        p. 327).</note> militaire <lb/>La religion entoure son berceau d’une auréole
                      mystique</quote>
                                    <bibl xml:id="b-10460-3"/>
                                </cit>
                            </item>
                            <item type="fragment" n="5">
                                <cit dbp:hand="GF-encre">
                                    <quote>- tous les peuples ont vu dans le Souverain<note type="DBP-footnote">"souverain" dans l’ouvrage de Block (t. II, p. 327).</note> la loi vivante -
                      mais l’idée d’y voir un représenta<supplied reason="decoupe" resp="#LF">nt</supplied>
                                        <lb/>de la Souveraineté<note type="DBP-footnote">"souveraineté" dans l’ouvrage de
                        Block (t. II, p. 327).</note> du peuple est une idée toute romaine.</quote>
                                    <bibl xml:id="b-10461-3"/>
                                </cit>
                            </item>
                        </list>
                    </item>
    Je vous fait remarquer la partie rouge, source de mes problèmes.

    Je voudrais,
    lors d'une recherche plein text avec Solr, que "castor" me retourne le fichier cité plus haut; et ce n'est pas le cas. SI je veux le voir je dois rechercher
    "c astor"

    Pour cela, nous avions deux fieldType text et text_only:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
      <fieldType name="text_only" class="solr.TextField" positionIncrementGap="100">
           <analyzer>
           <!-- analyseur configuré pour le français par Gaël -->
            <!-- suppression d'éventuelles balises HTML-->
            <charFilter class="solr.HTMLStripCharFilterFactory"/>
            <!-- découpage selon les espaces -->
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <!-- suppression de la ponctuation -->
            <filter class="solr.PatternReplaceFilterFactory" pattern="^(\p{Punct}*)(.*?)(\p{Punct}*)$" replacement="$2"/>
            <!-- suppression des tokens vides et des mots démesurés -->
            <filter class="solr.LengthFilterFactory" min="1" max="100" />
            <!-- passage en minuscules -->
            <filter class="solr.LowerCaseFilterFactory"/>
            <!-- suppression des élisions (l', qu',...) -->
            <filter class="solr.ElisionFilterFactory" articles="elisionwords.txt"/> 
            <!-- découpage des mots composés -->
            <filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="1" splitOnNumerics="1" stemEnglishPossessive="1" generateWordParts="1"
                                                            generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/>
            <!-- suppression des mots insignifiants -->
            <filter class="solr.StopFilterFactory" ignoreCase="1" words="stopwords.txt" enablePositionIncrements="true"/>
            <!-- gestion des synonymes -->
    	<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <!-- lemmatisation (pluriels,...) -->
            <filter class="solr.SnowballPorterFilterFactory" language="French" protected="protwords.txt"/>
            <!-- normalisation des accents, cédilles, e dans l'o,...-->
            <filter class="solr.ASCIIFoldingFilterFactory"/>
            <!-- suppression des doublons éventuels -->
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
          </analyzer>
        </fieldType>
     
     
        <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
          <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <!-- in this example, we will only use synonyms at query time
            <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
            -->
            <!-- Case insensitive stop word removal.
              add enablePositionIncrements=true in both the index and query
              analyzers to leave a 'gap' for more accurate phrase queries.
            -->
            <filter class="solr.StopFilterFactory"
                    ignoreCase="true"
                    words="stopwords.txt"
                    enablePositionIncrements="true"
                    />
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
          </analyzer>
          <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.StopFilterFactory"
                    ignoreCase="true"
                    words="stopwords.txt"
                    enablePositionIncrements="true"
                    />
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
          </analyzer>
        </fieldType>
    et trois index (pour tester):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       <field name="body" type="text" indexed="true" stored="true"/>
     
       <!-- body mais avec du XML -->
       <field name="body_xml" type="text" indexed="true" stored="true"/>
     
       <!-- body normalise avec html -->
       <field name="body_norm" type="text_only" indexed="true" stored="true"/>
    Je les définit comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $doc->addField('body_xml', str_replace ('<lb/>', '<br />', $mybody));
    		$doc->addField('body_norm', str_replace ('<lb/>', '<br />', $mybody));
    		$doc->addField('body', strip_tags($mybody));
     
    		//$doc->addField('body_norm', strip_tags($mybody));
    J'ai aussi essayer avec une transformation xslt (pour body_norm) qui m'affiche "castor" lors de l'affichage du doc xml dans le browser, mais cela ne change rien.
    Avec l'exemple ci-dessus, si je vais dans solr admin analysis faire une requete sur text_only du bout d'xml cité, solr ne retourne aucun résultat.

    Enfin, je suis un peu à cours d'idée, si vous pouviez m'aider; merci!!
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  2. #2
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    remarque supplémentaire:
    quant je regarde le schema browser, je ne vois nulle mention du charfilter solr.HTMLStripCharFilterFactory .
    est-ce normal?
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  3. #3
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    J'ai aussi essayé ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <fieldType name="frenchText" class="solr.TextField" positionIncrementGap="100">
        <analyzer>
            <charFilter class="solr.HTMLStripCharFilterFactory"/>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.SnowballPorterFilterFactory" language="French"/>
        </analyzer>
    </fieldType>
    Mais rien n'y fait
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  4. #4
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Alors,
    je pense qu'il faut indexer la version normalisée de mon texte.
    au lieu d'avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <item type="fragment" n="3">
                                <cit dbp:hand="GF-encre">
                                    <quote>si les <hi rend="underline">ruches d’<term>abeilles</term>
                                        </hi> prouvent la
                      monarchie, les fourmillières, les troupes d’éléphants ou de <lb/>
                                        <choice>
                                            <orig>C</orig>
                                            <reg>c</reg>
                                        </choice>astors prouvent la république.</quote>
                                    <bibl xml:id="b-7468-3"/>
                                </cit>
                            </item>
    on aurait dans l'index
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    si les <span class="hi rend-underline rend-underline">ruches d’<span class="term">abeilles</span></span> prouvent la
                      monarchie, les fourmillières, les troupes d’éléphants ou de <span class="reg">c</span>astors prouvent la république.
    A ce moment là, il faudrait rajouter un filtre du style <charFilter class="solr.HTMLStripCharFilterFactory"/>.
    Ce qui devrait , si je comprend bien (c pas gagné ) , permettre de retourner un résultat pour la recherche de "castor" ?!

    pleaze help !




    Si il vous manque des infos n'hésitez pas à demander. Je me ferais un plaisir de vous renseigner.
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  5. #5
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Je m'aperçois après relecture que je me suis mal expliqué.
    Je voulais dire que le html (voir plus haut) sera découpé selon les filtres. Et que ce résultat sera indexé.
    Mon raisonnement précedent devrait donc être bon, ssi solr.HTMLStripCharFilterFactory elimine les balises html. Ce qui ne semble pas être le cas....
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  6. #6
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Tout est ok il me manquait un paramètre dans la config de solr .
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] Affichage des balises xml en html via une xslt
    Par Eileen dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 20/04/2007, 15h53
  2. [XSLT]Modifier l'ordre des balises XML
    Par Philos15 dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 18/10/2006, 09h54
  3. Réponses: 1
    Dernier message: 13/09/2006, 15h12
  4. Extraire le contenu des balises XML
    Par calimero2611 dans le forum Modules
    Réponses: 7
    Dernier message: 12/06/2006, 15h09
  5. [CSS] Termes séparé par des pointillées
    Par adiGuba dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 18/04/2006, 14h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo