-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
533 lines (394 loc) · 32.5 KB
/
index.html
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<title>Test - tutoriel en cours de conception by AlexandreToyer</title>
<link rel="stylesheet" href="stylesheets/styles.css">
<link rel="stylesheet" href="stylesheets/pygment_trac.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="javascripts/main.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
</head>
<body>
<header>
<h1>Test - tutoriel en cours de conception</h1>
<p></p>
</header>
<div id="banner">
<span id="logo"></span>
<a href="https://github.com/AlexandreToyer/test" class="button fork"><strong>View On GitHub</strong></a>
<div class="downloads">
<span>Downloads:</span>
<ul>
<li><a href="https://github.com/AlexandreToyer/test/zipball/master" class="button">ZIP</a></li>
<li><a href="https://github.com/AlexandreToyer/test/tarball/master" class="button">TAR</a></li>
</ul>
</div>
</div><!-- end banner -->
<div class="wrapper">
<nav>
<ul></ul>
</nav>
<section>
<h1>
<a name="tutoriel-en-cours-d%C3%A9criture" class="anchor" href="#tutoriel-en-cours-d%C3%A9criture"><span class="octicon octicon-link"></span></a>Tutoriel en cours d'écriture</h1>
<p>Ce tutoriel est actuellement en cours de rédaction et n'est pas encore finalisé.</p>
<h1>
<a name="crawler-un-site-internet-et-obtenir-un-moteur-de-recherche" class="anchor" href="#crawler-un-site-internet-et-obtenir-un-moteur-de-recherche"><span class="octicon octicon-link"></span></a>Crawler un site internet et obtenir un moteur de recherche</h1>
<p>Ce tutoriel simple permet de prendre rapidement en main les principales fonctionnalités d'<a href="http://www.open-search-server.com/fr">OpenSearchServer</a>.</p>
<p>Vous apprendrez à :</p>
<ul>
<li>
<strong>crawler un site web</strong>,</li>
<li>
<strong>construire l'index de recherche</strong>, </li>
<li>mettre en place <strong>une page de recherche</strong> paginée, </li>
<li>
<strong>configurer des facettes</strong>, </li>
<li>paramétrer la mise en avant d'extraits de résultats, </li>
<li>
<strong>activer l'auto-complétion</strong>.</li>
</ul><p>Voici la page de recherche finale que nous obtiendrons :
<img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_resultat2.PNG" alt="Résultat final"></p>
<p>Pour illustrer notre tutoriel, nous avons pris l’exemple d’un site d'actualités. Nous avons créé pour cela 4 pages fictives :</p>
<ul>
<li>
<a href="http://www.open-search-server.com/fr/site-de-test-crawler/">http://www.open-search-server.com/fr/site-de-test-crawler/</a>
<ul>
<li><a href="http://www.open-search-server.com/fr/site-de-test-crawler-le-chomage-est-en-baisse/">http://www.open-search-server.com/fr/site-de-test-crawler-le-chomage-est-en-baisse/</a></li>
<li><a href="http://www.open-search-server.com/fr/site-de-test-crawler-la-coupe-du-monde-2040/">http://www.open-search-server.com/fr/site-de-test-crawler-la-coupe-du-monde-2040</a></li>
<li><a href="http://www.open-search-server.com/fr/site-de-test-crawler-la-ceremonie-des-oscars/">http://www.open-search-server.com/fr/site-de-test-crawler-la-ceremonie-des-oscars/</a></li>
</ul>
</li>
</ul><p>Pour commencer il vous suffit d'<a href="http://www.open-search-server.com/fr/tester-opensearchserver">Installer OpenSearchServer en 3 minutes</a>.</p>
<h2>
<a name="quelques-d%C3%A9finitions" class="anchor" href="#quelques-d%C3%A9finitions"><span class="octicon octicon-link"></span></a>Quelques définitions</h2>
<p>Avant de démarrer ce tutoriel il est important de connaitre les principaux constituants d'un moteur de recherche :</p>
<ul>
<li>
<strong>Index de recherche</strong> : l'index est l'endroit où les documents sont enregistrés, découpés et classés selon différents algorithmes afin de permettre ensuite leur recherche rapide.</li>
<li>
<strong>Crawler</strong> : le crawler web explore les sites web demandés pour indexer leurs pages. Il est capable de suivre seul les liens présents dans les pages tout en se cantonnant à un domaine précis. Il permet d'enregistrer différents types de documents : les pages web, les images, les fichiers liés, etc. Il existe aussi des crawlers de système de fichier et des crawler de base de données.</li>
<li>
<strong>Schema</strong> : le schéma détermine la structure d'un index. C'est lui qui indique quels sont les champs des documents indexés.</li>
<li>
<strong>Query</strong> : les query représentent les requêtes de recherche personnalisées. Dans une requête il est possible de configurer les champs du schéma dans lesquels rechercher, la pertinence de chaque champ, la présence de facettes et de snippets, etc.</li>
<li>
<strong>Facette</strong> : les facettes sont des compteurs de documents basés sur des valeurs partagées par tous.</li>
<li>
<strong>Snippet</strong> : les snippets sont des extraits de document permettant de mettre en avant les mots recherchés.</li>
<li>
<strong>Renderer</strong> : dans OpenSearchServer les renderers sont des pages de recherche simple à mettre en place et pouvant être proposées aux internautes</li>
<li>
<strong>Parser</strong> : les parsers servent à extraire des informations structurées à partir des documents indexés (titre, auteur, description, ...)</li>
<li>
<strong>Analyzer</strong> : les analyzers sont des composants personnalisables permettant d'appliquer certains traitements sur les textes indexés ou recherchés (découpage en token, retrait des accents, conversion d'unités, ...)</li>
<li>
<strong>Scheduler</strong> : le scheduler d'OpenSearchServer est un gestionnaire de tâches offrant la possibilité de programmer l'exécution de différents jobs </li>
</ul><p>Le schéma suivant présente les principales briques d'OpenSearchServer de manière simplifiée :</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/schema3.PNG" alt="Résultat final"></p>
<p>Maintenant que tout est clair, débutons !</p>
<h2>
<a name="mettre-en-place-le-crawl-et-indexer-les-contenus" class="anchor" href="#mettre-en-place-le-crawl-et-indexer-les-contenus"><span class="octicon octicon-link"></span></a>Mettre en place le crawl et indexer les contenus</h2>
<h3>
<a name="cr%C3%A9ation-et-configuration-initiale-de-lindex" class="anchor" href="#cr%C3%A9ation-et-configuration-initiale-de-lindex"><span class="octicon octicon-link"></span></a>Création et configuration initiale de l'index</h3>
<p>Commençons par créer un <code>index</code>. L'index est le cœur d'OpenSearchServer, c'est autour des index que le reste des fonctionnalités s'organisent. L'index permet de stocker et d'indexer tous les <strong>documents</strong> qui lui sont soumis. La plupart du temps un document correspond à une page web, représentée par son URL, mais cela peut aussi être un fichier ou un contenu issu d'une base de données.</p>
<ul>
<li>Nom de l'index : <code>site</code>
</li>
<li>Template : <code>Empty index</code>
</li>
</ul><p>Cliquez sur <code>Create</code>.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_creation.PNG" alt="Création de l'index"></p>
<blockquote>
<p>OpenSearchServer propose également 2 templates d'index pré-configurés : l'un pour du crawl de site web, l'autre pour du crawl de file system. </p>
<p>Le template <code>Web crawler</code> permet de mettre en place extrêmement rapidement un système de crawl et de recherche sur son site internet en minimisant très fortement la configuration nécessaire. Cet index propose en effet un schéma très complet utilisant différents parsers et analyzer, une <code>query</code> performante et un <code>renderer</code> prêt à l'emploi.</p>
<p>Nous n'emploierons cependant pas ce template pour ce tutoriel car notre but ici est justement de vous faire prendre en main les options de configuration les plus classiques qui vous permettront ensuite d'adapter le moteur à vos besoins spécifique.</p>
</blockquote>
<p>L'index est créé immédiatement. Le contexte global de l'interface change et de nouveaux onglets apparaissent en haut de page.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_tabs.PNG" alt="Onglets de la navigation principale"></p>
<p>Sélectionnez l'onglet <code>Schema</code>. Le schéma permet de définir quels sont les champs de l'index.
Un champ de schéma possède 5 propriétés :</p>
<ul>
<li>
<strong>Name</strong> : le nom du champ</li>
<li>
<strong>Indexed</strong> : indique si la valeur du champ doit être indexée, ce qui permettra alors d'effectuer des requêtes dessus. Il arrive que certains champs ne soient pas utilisés dans les recherches mais doivent tout de même être retournés (voir propriété suivante) lors d'une requête de recherche.</li>
<li>
<strong>Stored</strong> : indique si la valeur du champ doit être stockée telle quelle. Cela permettra de renvoyer la donnée brute lors d'une requête de recherche.</li>
<li>
<strong>TermVector</strong> : indique si des <code>snippets</code> pourront être configurés sur ce champ. Les snippet sont des extraits de texte contenant les mots recherchés.</li>
<li>
<strong>Analyzer</strong> : les <code>analyzers</code> sont des ensembles de filtre et de traitements automatiques qui peuvent être effectués sur les valeurs indexées. </li>
</ul><p>Nous allons créer 4 champs pour indexer nos actualités : url, title, category et content.</p>
<p>Créez le champ url :</p>
<ul>
<li>
<strong>Name</strong> : url</li>
<li>
<strong>Indexed</strong> : yes</li>
<li>
<strong>Stored</strong> : yes</li>
<li>
<strong>TermVector</strong> : no</li>
<li>
<strong>Analyzer</strong> : laisser vide</li>
</ul><p>Cliquez sur le bouton <code>Add</code>.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_create_field_url.PNG" alt="Création du champ url"></p>
<p>Le champ est ajouté en dessous dans la zone <strong>List of existing fields and their settings</strong>.</p>
<p>Créez les 3 autres champs en choisissant ces options :</p>
<ul>
<li>title :
<ul>
<li>
<strong>Name</strong> : title</li>
<li>
<strong>Indexed</strong> : yes</li>
<li>
<strong>Stored</strong> : yes</li>
<li>
<strong>TermVector</strong> : positions_offset</li>
<li>
<strong>Analyzer</strong> : StandardAnalyzer</li>
</ul>
</li>
<li>category :
<ul>
<li>
<strong>Name</strong> : category</li>
<li>
<strong>Indexed</strong> : yes</li>
<li>
<strong>Stored</strong> : no</li>
<li>
<strong>TermVector</strong> : no</li>
<li>
<strong>Analyzer</strong> : laisser vide</li>
</ul>
</li>
<li>content :
<ul>
<li>
<strong>Name</strong> : content</li>
<li>
<strong>Indexed</strong> : yes</li>
<li>
<strong>Stored</strong> : yes</li>
<li>
<strong>TermVector</strong> : positions_offset</li>
<li>
<strong>Analyzer</strong> : StandardAnalyzer</li>
</ul>
</li>
</ul><p>Nos 4 champs sont maintenant créés et visibles dans la liste des champs.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_schema_fields.PNG" alt="Configuration du schéma"></p>
<p>Nous devons configurer un champ par défaut et un champ unique. Pour cela sélectionnez <code>content</code> dans la première liste et <code>url</code> dans la seconde.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_schema_default.PNG" alt="Configuration du schéma"></p>
<h4>
<a name="configuration-du-parser-html" class="anchor" href="#configuration-du-parser-html"><span class="octicon octicon-link"></span></a>Configuration du parser HTML</h4>
<p>Il nous faut maintenant expliquer au moteur comment extraire certaines informations des pages crawlées afin de les ranger des les champs du schéma.</p>
<p>Toujours au sein de l'onglet <code>Schema</code> cliquez sur l'onglet <code>Parser list</code>. Cette page présente les différents <code>parser</code> disponibles. Beaucoup de parser sont créés par défaut. Cliquez sur le bouton <code>Delete</code> pour tous les parsers excepté pour le <code>HTML parser</code>.
Cliquez sur le bouton <code>Edit</code> sur la ligne <code>HTML parser</code>. La page d'édition du parser HTML s'affiche. Cliquez sur l'onglet <code>Field mapping</code>. Ici encore plusieurs correspondances sont pré-configurées. Dans le cadre du tutorial nous allons toutes les supprimer pour en recréer 3. Cliquez sur la petite croix rouge présente en fin de chaque ligne.</p>
<p>Nous allons faire en sorte que le moteur repère dans le HTML source de chaque page le titre, la rubrique et le contenu qui nous intéresse afin d'indexer ces informations proprement. Pour cela nous devons lui indiquer à partir de quel champ source travailler, dans quel champ de l'index écrire les données et via quelle expression régulière extraire ces données. Au sein de l'expression régulière c'est le groupe de capture, déterminé par des parenthèses, qui donnera sa valeur au champ.</p>
<p>Nous n'entrerons pas ici dans le détail de l'écriture des expressions régulières mais vous pourrez trouvez beaucoup d'informations sur le web, notamment sur ce site : <a href="http://www.regular-expressions.info/">http://www.regular-expressions.info/</a></p>
<p>Configurez 3 <code>mapping</code>:</p>
<ul>
<li>Premier mapping : nous extrayons le titre à partir du <code>h1</code> de la page
<ul>
<li>première liste : sélectionnez <code>htmlSource</code>
</li>
<li>seconde liste : sélectionnez <code>title</code>
</li>
<li>champ <code>captured by (reg.exp.)</code> : saisissez cette expression régulière : <code><h1 class="post-title">(.*?)</h1></code>. Cela nous permet de capturer la valeur se trouvant au sein de la balise h1</li>
<li>cliquez sur le bouton <code>Add</code>
</li>
</ul>
</li>
<li>Second mapping : nous extrayons la rubrique à partir d'un élément du fil d'ariane
<ul>
<li>première liste : <code>htmlSource</code>
</li>
<li>seconde liste : <code>category</code>
</li>
<li>regexp : <code>(?s)<a[^<]*class="rubrique"[^<]*>(.*?)</a></code>
</li>
<li>cliquez sur le bouton <code>Add</code>
</li>
</ul>
</li>
<li>Troisième mapping : nous extrayons le contenu principal de l'article
<ul>
<li>première liste : <code>htmlSource</code>
</li>
<li>seconde liste : <code>content</code>
</li>
<li>regexp : <code>(?s)<div class="post-entry">.*<p>&nbsp;</p>[^<]*<p>(.*?)</div></code>
</li>
<li>cliquez sur le bouton <code>Add</code>
</li>
</ul>
</li>
</ul><p>Cliquez maintenant sur le bouton <code>Save</code> en bas de page.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_parser_mapping.PNG" alt="Configuration du parser HTML"></p>
<p>Voilà, le parser HTML est configuré ! Dorénavant chaque page crawlée sera traitée par ce parser avant d'être indexée. </p>
<h3>
<a name="configuration-du-crawl" class="anchor" href="#configuration-du-crawl"><span class="octicon octicon-link"></span></a>Configuration du crawl</h3>
<p>Nous devons maintenant configurer le crawler web d'OSS afin qu'il parcoure et qu'il indexe les pages désirées.</p>
<p>Rendez-vous dans l'onglet <code>Crawler</code> de l'index site. La section crawler contient deux sous navigation par onglets. Le premier des ces deux niveaux permet de choisir entre la configuration du crawler web, du crawler de base de données et du crawler de système de fichier.</p>
<p>Restons sur l'onglet <code>Web</code>. Le second niveau de navigation permet de naviguer à travers les rubriques du crawler web.</p>
<p>L'onglet sélectionné par défaut, <code>Pattern list</code>, est celui qui nous intéresse ici.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_crawler.PNG" alt="Onglet par défaut du crawler web"></p>
<p>Le site que nous souhaitons crawler est <a href="http://www.open-search-server.com/fr/site-de-test-crawler/">http://www.open-search-server.com/fr/site-de-test-crawler/</a>. Nous pouvons voir que cette URL contient les liens vers toutes les pages d'actualités. Nous pouvons donc indiquer au crawler de commencer son crawl ici et d'indexer toutes les pages se trouvant "sous" cette URL.</p>
<p>Dans le champ de saisie de l'onglet Pattern list indiquez <code>http://www.open-search-server.com/fr/site-de-test-crawler/</code> et <code>http://www.open-search-server.com/fr/site-de-test-crawler-*</code> puis cliquer sur le bouton Add. L'URL renseigné s'ajoute à la zone du dessous contenant toutes les URL à crawler.</p>
<p>La partie <code>-*</code> indique ici au crawler de parcourir toutes les pages dont l'URL débute par <code>http://www.open-search-server.com/fr/site-de-test-crawler-</code>.</p>
<p>Rendez-vous ensuite dans l'onglet <code>Field mapping</code>. Nous allons ici configurer le crawler pour qu'il place automatiquement l'URL de la page crawlée dans le champ <code>url</code> du schéma. Le crawler peut en effet manipuler directement un certain nombre d'éléments issus de la page web crawlée, comme par exemple son url, les headers de réponses, l'url referer, etc.</p>
<p>Choisissez <code>url</code> dans les deux listes déroulantes puis cliquez sur <code>Add</code>. Le mapping entre les deux champs s'ajoute immédiatement dans la zone du dessous.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_crawler_urlmapping.PNG" alt="Mapping du champ url"></p>
<p>Voilà, nous avons configuré le crawler en 2 étapes !</p>
<h3>
<a name="d%C3%A9marrage-du-crawl" class="anchor" href="#d%C3%A9marrage-du-crawl"><span class="octicon octicon-link"></span></a>Démarrage du crawl</h3>
<p>Il est maintenant temps de démarrer le crawler. Rendez-vous pour cela dans l'onglet <code>Crawler</code> puis <code>Crawl process</code>. Différents paramètres liés au crawl peuvent être réglés ici. Saisissez 7 dans le champ <code>Delay between each successive access, in seconds:</code>, 5 dans le champ <code>Fetch interval between re-fetches:</code> et sélectionnez <code>minutes</code> dans la liste déroulante. </p>
<p>Dans le bloc <code>Current status</code> choisissez <code>Run forever</code> dans la liste puis cliquez sur le bouton <code>Not running - click to run</code> afin de lancer le crawl. Ici encore, le process s'actualise immédiatement dans la zone du dessous.</p>
<p>Pendant que les pages sont crawlés et les documents ajoutés à l'index nous allons voir comment les recherches peuvent être effectuées dans ces documents.</p>
<blockquote>
<p>L'onglet <code>Manual crawl</code> vous permet d'observer immédiatement le comportement du crawler pour une URL précise : statut du crawl, champs parsés, etc.</p>
</blockquote>
<h2>
<a name="rechercher-les-contenus-index%C3%A9s-et-personnaliser-la-pertinence-des-r%C3%A9sultats" class="anchor" href="#rechercher-les-contenus-index%C3%A9s-et-personnaliser-la-pertinence-des-r%C3%A9sultats"><span class="octicon octicon-link"></span></a>Rechercher les contenus indexés et personnaliser la pertinence des résultats</h2>
<h3>
<a name="cr%C3%A9ation-de-la-requ%C3%AAte-de-recherche-full-text" class="anchor" href="#cr%C3%A9ation-de-la-requ%C3%AAte-de-recherche-full-text"><span class="octicon octicon-link"></span></a>Création de la requête de recherche full-text</h3>
<p>Cliquez sur l'onglet <code>Query</code>. Dans le champ <code>Query name</code> saisissez <code>search_articles</code> puis cliquez sur le bouton <code>New query...</code></p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_query_search.PNG" alt="Création d'une requête de recherche"></p>
<p>Les <code>query</code> peuvent ensuite être construites avec un formalisme puissant, mais facilement abordable. Il faut en effet indiquer au moteur de recherche dans quel champ la recherche full-text doit s'effectuer et quel poids accorder à chaque champ. </p>
<p>En effet comme nous l'avons vu au début de ce tutorial certains champs peuvent n'être que stockés mais pas indexés, car nous ne souhaitons pas effectuer de recherche dessus.
De plus nous pouvons considérer que des documents qui contiendront les mots recherchés dans leur titre ont plus de poids, et donc plus de pertinence, que les documents ne contenant ces mots que dans leur contenu.</p>
<p>Nous pouvons donc utiliser cette requête :</p>
<pre><code>title:($$)^10 OR title:("$$")^10 OR
category:($$)^7 OR category:("$$")^7 OR
content:($$)^4 OR content:("$$")^4
</code></pre>
<p><code>$$</code> représente ici le ou les mots saisis lors de la recherche.</p>
<p>Nous indiquons au moteur de rechercher d'abord dans le titre avec un poids important, puis ensuite dans la rubrique avec un poids plus faible et enfin dans le contenu de l'article.</p>
<p>Nous utilisons également la notation <code>($$)</code> et <code>("$$")</code> qui permet d'obtenir des documents contenant les mots recherchés soit de manière éclatée soit de manière regroupée.</p>
<p>Saisissez la requête dans le champ <code>Pattern query</code> puis cliquez sur le bouton <code>Save</code> se trouvant en haut à droite de la page.</p>
<p>Nous pouvons à présent effectuer des recherches sur les documents qui ont été indexés durant le temps de création de la requête.</p>
<p>Cliquez sur le bouton <code>Edit</code> de la requête afin de revenir à sa page d'édition. Dans le champ <code>Enter the query</code> saisissez par exemple <code>coupe</code> puis cliquez sur le bouton <code>Search</code>. Le moteur retourne les documents correspondant dans la zone du dessous. </p>
<blockquote>
<p>Vous pouvez laisser le champ <code>Enter the query</code> vide ou saisir le mot clé <code>*:*</code> pour obtenir tous les documents.</p>
</blockquote>
<h2>
<a name="proposer-une-page-de-recherche-aux-utilisateurs" class="anchor" href="#proposer-une-page-de-recherche-aux-utilisateurs"><span class="octicon octicon-link"></span></a>Proposer une page de recherche aux utilisateurs</h2>
<p>Jusqu'à présent nous avons pu rapidement mettre en place un index de document, un crawler de page web et une manière de rechercher les documents.</p>
<p>Nous allons maintenant voir comment mettre à disposition des utilisateurs de notre site internet ce moteur de recherche.</p>
<p>Cliquez sur l'onglet <code>Renderer</code> puis sur le bouton <code>New renderer...</code>.</p>
<p>Dans le champ <code>Renderer name</code> saisissez <code>default</code> et sélectionner la requête <code>search_articles</code> dans la liste déroulante <code>Request name</code>.</p>
<p>Cliquez sur l'onglet <code>Fields</code>, choisissez <code>title</code> dans la seconde liste déroulante et <code>url</code> dans la liste <code>URL field</code>. Cliquez sur le bouton <code>+</code> situé en fin de ligne.</p>
<p>Cliquer ensuite sur le bouton <code>Create</code>.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_renderer.PNG" alt="Le renderer"></p>
<p>Nous avons ainsi créer une page de recherche qui utilisera la requête <code>search_articles</code> configurée au préalable. </p>
<p>Dans la liste des <code>renderer</code> cliquez sur le bouton <code>View</code> sur la ligne du renderer <code>default</code>. </p>
<p>La page obtenue contient un formulaire de recherche directement utilisable par les internautes ! </p>
<p>Vous pouvez retourner dans l'édition du renderer pour définir des CSS personnalisés et modifier les autres paramètres.
Saisissez par exemple les règles CSS suivantes pour modifier l'affichage de la page de recherche :</p>
<pre><code>* { font-family: verdana, arial; font-size:12px;}
.ossfieldrdr1 { margin:10px 0 0 0; padding:10px 0 0 0; border-top:1px solid #ebebeb}
#oss-facet ul li:first-child{font-weight:bold; padding:3px; background:#efefef; margin:0 0 5px 0; width:140px;}
.oss-input-div { padding:10px 0 0 0;}
</code></pre>
<blockquote>
<p>L'onglet <code>Testing</code> vous fournira le code source de l'iFrame à intégrer sur une page de votre site internet.</p>
</blockquote>
<h2>
<a name="ajouter-une-facette" class="anchor" href="#ajouter-une-facette"><span class="octicon octicon-link"></span></a>Ajouter une facette</h2>
<p>Nous avons configuré le crawler et le schéma pour qu'à chaque article indexé soit associé une rubrique. Nous allons maintenant voir comment exposer cette rubrique en tant que facette. </p>
<p>Les facettes sont des compteurs thématiques de résultats, qui servent également de filtre de recherche.</p>
<p>Cliquez sur l'onglet <code>Query</code> puis sur le bouton <code>Edit</code> de la requête <code>search_articles</code>.</p>
<p>Cliquez ensuite sur l'onglet <code>Faceted fields</code>, choisissez <code>category</code> dans la liste puis cliquez sur le bouton <code>add facet</code>. Cliquez ensuite sur le bouton <code>Save</code> en haut à droite.</p>
<p>Ré-affichez la page du renderer (clic sur <code>View</code> dans l'onglet <code>renderer</code>) et effectuez une recherche : la facette est automatiquement ajoutée !</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_facets.PNG" alt="Facettes"></p>
<blockquote>
<p>Comme vous avez dû vous en apercevoir depuis le début du tutoriel OpenSearchServer prend en compte <em>à chaud</em> tous les changements de configuration ! Aucun redémarrage de service n'est nécessaire.</p>
</blockquote>
<h2>
<a name="ajouter-des-snippets" class="anchor" href="#ajouter-des-snippets"><span class="octicon octicon-link"></span></a>Ajouter des snippets</h2>
<p>Les snippets sont des extraits de résultats contenant le ou les mots recherchés. Nous allons configurer une snippet sur le titre du document et une autre sur le champ content.</p>
<p>Cliquez sur l'onglet <code>Query</code> puis sur le bouton <code>Edit</code> de la requête <code>search_articles</code>.</p>
<p>Cliquez ensuite sur l'onglet <code>Snippet fields</code>, choisissez <code>title</code> dans la liste puis cliquez sur le bouton <code>add snippet</code>. Dans le champ <code>Tag</code> saisissez par exemple <code>strong</code>. </p>
<p>Répétez l'opération pour le champ <code>content</code>.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_renderer_fields.PNG" alt="Utilisation des snippets dans le renderer"></p>
<p>Cliquez ensuite sur le bouton <code>Save</code> en haut à droite.</p>
<p>Nous devons maintenant indiquer au renderer d'utiliser les snippets à la place du champ <code>title</code> configuré plus tôt. Cliquez sur l'onglet <code>Renderer</code> puis sur le bouton <code>Edit</code>. Dans l'onglet <code>Fields</code> supprimer le champ <code>title</code> préalablement configuré.
Choisissez <code>SNIPPET</code> dans la première liste déroulante puis <code>title</code> dans la seconde. Dans <code>URL Field</code> choisissez <code>url</code> puis cliquez sur le bouton <code>+</code> en fin de ligne.
Répétez l'opération pour la snippet content, sans configurer d'url.</p>
<p>Cliquez sur le bouton <code>save</code> en bas de page et ré-affichez le renderer puis effectuez une recherche. Le ou les mots recherchés sont à présent affichés en gras dans la page de résultat.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_snippet.PNG" alt="Facettes"></p>
<h2>
<a name="ajouter-lautocompl%C3%A9tion" class="anchor" href="#ajouter-lautocompl%C3%A9tion"><span class="octicon octicon-link"></span></a>Ajouter l’autocomplétion</h2>
<p>OpenSearchServer gère très simplement l'ajout de l'auto-complétion. Pour ajouter cette fonctionnalité nous devons configurer un nouveau champ dans le schéma et compléter le parser HTML pour envoyer des données dans ce champ. OpenSearchServer s'occupe ensuite seul de construire l'index d'auto-complétion et de renvoyer les résultats au fur et à mesure de la frappe.
Pour l'exemple nous allons faire en sorte que l'auto-complétion fonctionne sur les titres de pages.</p>
<p>Cliquez sur l'onglet <code>Schema</code>. Dans l'onglet <code>Fields</code> ajoutez un nouveau champ :</p>
<ul>
<li>
<strong>Name</strong> : autocomplete</li>
<li>
<strong>Indexed</strong> : yes</li>
<li>
<strong>Stored</strong> : yes</li>
<li>
<strong>TermVector</strong> : no</li>
<li>
<strong>Analyzer</strong> : AutoCompletionAnalyzer</li>
</ul><p>Cliquez sur le bouton <code>Add</code>.</p>
<p>Cliquez sur l'onglet <code>Parser list</code> puis éditez le parser <code>HTML parser</code>. Ajoutez une correspondance entre la valeur <code>title</code> (première liste) et le champ <code>autocomplete</code> (seconde liste). Cliquez sur <code>Add</code> puis sur <code>Save</code>.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_parser_autocomplete.PNG" alt="Configuration de l'auto-complétion"></p>
<p>Il faut maintenant attendre 1 à 2 minutes pour que le crawler passe à nouveau sur les pages pour ajouter des données dans le nouveau champ auto-complete. Assurez-vous pour cela que le crawler soit encore en train de tourner, autrement relancez-le (onglet <code>Crawler</code> / <code>Web crawler</code> / <code>Crawl process</code>).</p>
<p>Passez ensuite sur l'onglet <code>Schema</code> / <code>Auto-completion</code>. Dans la liste <code>Field source</code> choisissez le champ autocomplete puis cliquez sur le bouton <code>Build</code>. La valeur indiquée en face de <code>Number of terms</code> doit passer de 0 à un nombre plus important. Cliquez sur <code>save</code>.</p>
<p><img src="http://alexandre-toyer.fr/nonSitePerso/oss/tuto_autocomplete_config.PNG" alt="Configuration de l'auto-complétion"></p>
<blockquote>
<p>Le processus de reconstruction de l'index d'auto-complétion peut facilement être exécuté de manière régulière via la création d'un <code>job</code> dans le puissant gestionnaire de tâche d'OpenSearchServer (onglet <code>Scheduler</code>).</p>
</blockquote>
<p>Ré-affichez la page du renderer (clic sur <code>View</code> dans l'onglet <code>renderer</code>) et commencez à taper un mot, par exemple <code>cho</code>. L'auto-complétion s'est directement ajoutée à la page de recherche !
Les valeurs proposées sont cependant illisibles car elles ne sont pas encore mises en forme.</p>
<p>Retournez sur l'onglet <code>Renderer</code> puis éditer le renderer. Dans l'onglet <code>CSS Styles</code> ajoutez ces lignes :</p>
<pre><code>.osscmnrdr { font-family: arial,sans-serif; }
.ossinputrdr { font-size:inherit; }
.ossbuttonrdr { font-size:inherit; }
#ossautocomplete { margin: 0;cursor: pointer;padding-left:3px;padding-right:3px; }
#ossautocompletelist { background-color: #FFFFFF;text-align: left;border-left: 1px solid #D3D3D3;border-bottom: 1px solid #D3D3D3;border-right: 1px solid #D3D3D3; }
.ossautocomplete_link { color:#222222;background-color: #FFFFFF;padding: 2px 6px 2px 6px; }
.ossautocomplete_link_over { color:#222222;background-color: #F5F5F5;padding: 2px 6px 2px 6px; }
.ossnumfound { padding-bottom:10px;padding-top:10px; }
.oss-paging { text-align: center; }
.ossfieldrdr1 { font-size:120%; }
.ossfieldrdr3 { color: #0E774A; }
</code></pre>
<p>Cliquez ensuite sur le bouton <code>Save</code> en bas de page et ré-actualisez la page de recherche. </p>
<h2>
<a name="que-faire-ensuite-" class="anchor" href="#que-faire-ensuite-"><span class="octicon octicon-link"></span></a>Que faire ensuite ?</h2>
<p>Nous venons de mettre en pratique quelques-unes des très nombreuses fonctionnalités proposées par OpenSearchServer. </p>
<p>Vous pouvez maintenant découvrir le reste de <a href="http://www.open-search-server.com/confluence/display/EN/Home">notre Centre de documentation</a>, qui vous permettra de comprendre les autres paramétrages du moteur.</p>
<p>Vous y trouverez également toute la documentation sur l'ensemble des API fournies par OpenSearchServer. L'utilisation de ces API, couplée avec <a href="https://github.com/jaeksoft">nos librairies clientes</a>, vous permettra d'intégrer très facilement et finement le moteur de recherche à votre application.</p>
<p>N'hésitez pas à créer un nouvel index en utilisant cette fois le template <code>Web crawler</code> pour découvrir des options d'indexation et de recherche encore plus puissantes !</p>
</section>
<footer>
<p>Project maintained by <a href="https://github.com/AlexandreToyer">AlexandreToyer</a></p>
<p><small>Hosted on GitHub Pages — Theme by <a href="https://twitter.com/michigangraham">mattgraham</a></small></p>
</footer>
</div>
<!--[if !IE]><script>fixScale(document);</script><![endif]-->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-42590313-1");
pageTracker._trackPageview();
} catch(err) {}
</script>
</body>
</html>