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 à :Je vous fait remarquer la partie rouge, source de mes problèmes.
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>&</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 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:et trois index (pour tester):
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>Je les définit comme suit:
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"/>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.
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));
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!!
Partager