{"id":2362,"date":"2015-01-09T10:20:45","date_gmt":"2015-01-09T08:20:45","guid":{"rendered":"http:\/\/www.extradrm.com\/?p=2362"},"modified":"2020-10-09T22:14:53","modified_gmt":"2020-10-09T20:14:53","slug":"first-tutorials-solr-lucene-pdf-old-documents-database-sample-php","status":"publish","type":"post","link":"https:\/\/www.extradrm.com\/?p=2362","title":{"rendered":"First Tutorials SolR \/ Lucene \/ PDF old documents \/ database sample php"},"content":{"rendered":"<p><a href=\"http:\/\/www.extradrm.com\/wp-content\/uploads\/2015\/01\/Administrating-Solr.pdf\">Administrating Solr<\/a> <a href=\"http:\/\/www.extradrm.com\/wp-content\/uploads\/2015\/01\/Tika-in-Action.pdf\">Tika in Action<\/a> <a href=\"http:\/\/www.extradrm.com\/wp-content\/uploads\/2015\/01\/Apache-Solr-4-Cookbook.pdf\">Apache Solr 4 Cookbook<\/a> <a href=\"http:\/\/www.extradrm.com\/wp-content\/uploads\/2015\/01\/Apache-Solr-High-Performance.pdf\">Apache Solr High Performance<\/a><\/p>\n<p><a href=\"http:\/\/www.extradrm.com\/wp-content\/uploads\/2015\/01\/LIWP_SolrSearchforDatabaseProgrammers.pdf\">LIWP_SolrSearchforDatabaseProgrammers<\/a> <a href=\"http:\/\/www.extradrm.com\/wp-content\/uploads\/2015\/01\/tutorial.pdf\">tutorial<\/a><\/p>\n<p><a href=\"http:\/\/www.extradrm.com\/wp-content\/uploads\/2015\/01\/Indexing_txt_html_SolR.pdf\">Indexing_txt_html_SolR<\/a><\/p>\n<p><a href=\"http:\/\/www.extradrm.com\/wp-content\/uploads\/2015\/01\/Lucid-Imagination_ECommerce-WP.pdf\">Lucid Imagination_ECommerce-WP<\/a><\/p>\n<p>Pr\u00e9voir le module de connection mysq\/jdbc pour les DIH :<\/p>\n<p><strong>Solr schema construction<\/strong><br \/>\nhttp:\/\/leblogdundsi.lesprost.fr\/article34\/moteur-de-recherche-solr-sous-windows-tomcat<\/p>\n<p>SolR est un moteur de recherche Open Source bas\u00e9 sur Lucene qui permet d&#8217;indexer tous types de documents (bases de donn\u00e9es, fichiers,&#8230;) et d&#8217;ex\u00e9cuter des requ\u00eates dessus. Il est tr\u00e8s puissant et nous l&#8217;avons mis en place sur un site de petites annonces.<\/p>\n<p>Nous allons d\u00e9tailler dans cet article comment l&#8217;installer sous Windows avec le serveur Tomcat et comment le remplir puis l&#8217;interroger.<\/p>\n<p>::TOC::<\/p>\n<h3>Installation initiale<\/h3>\n<h4>Pr\u00e9requis<\/h4>\n<ul>\n<li>Une JRE (ici, version 6 update 18)<br \/>\nAttention, sur www.java.com, la version par d\u00e9faut est 32bits, pensez \u00e0 bien choisir la version 64 bits i le serveur est en 64 bits.<\/li>\n<\/ul>\n<h4>Installation de Tomcat<\/h4>\n<ul>\n<li>Installez Tomcat \u00e0 partir du fichier ex\u00e9cutable d&#8217;install (32-bit\/64-bit Windows Service Installer).<\/li>\n<li>D\u00e9finissez un login\u00a0 (administrateur, par ex) et un mot de passe pour le manager.<\/li>\n<li>Lancez Tomcat puis arr\u00eatez-le (ceci permet de cr\u00e9er les dossiers Catalina\\localhost dans le dossier conf).<\/li>\n<li>V\u00e9rifiez dans le Gestionnaire de services que le service se lance bien automatiquement avec Windows (il est par d\u00e9faut en d\u00e9marrage manuel).<\/li>\n<\/ul>\n<h4>Pr\u00e9paration de SOLR<\/h4>\n<ul>\n<li>T\u00e9l\u00e9chargez la derni\u00e8re version de Solr (ici, 1.4.0) au format zip sur http:\/\/www.apache.org\/dyn\/closer.cgi\/lucene\/solr\/<\/li>\n<li>D\u00e9zipper la version binaire de SOLR dans C:\\apache-solr-1.4.0 (on trouve dans ce dossier les dossiers client, contrib, examples,\u0085) =&gt; Appelons ce dossier &lt;src&gt;.<\/li>\n<li>Cr\u00e9ez un dossier C:\\solr . Appelons ce dossier &lt;home&gt;<\/li>\n<li>Copier le dossier &lt;src&gt;\/examples\/webapps dans\u00a0&lt;home&gt; (le dossier webapps contient le fichier solr.war)<\/li>\n<li>Cr\u00e9er dans\u00a0&lt;home&gt; un dossier par index (ex : <strong>index1<\/strong>, <strong>index2<\/strong>)<\/li>\n<li>Copier dans chacun d&#8217;eux le contenu du dossier\u00a0&lt;src&gt;\/examples\/solr\/(dossiers <strong>bin<\/strong> et <strong>conf<\/strong>)<\/li>\n<li>Cr\u00e9er dans chacun d&#8217;eux un dossier <strong>data<\/strong><\/li>\n<\/ul>\n<h4>R\u00e9f\u00e9rences<\/h4>\n<ul>\n<li><a title=\"http:\/\/www.eolya.fr\/2008\/12\/08\/introduction-a-solr-installation-et-configuration-1\/\" href=\"http:\/\/www.eolya.fr\/2008\/12\/08\/introduction-a-solr-installation-et-configuration-1\/\">http:\/\/www.eolya.fr\/2008\/12\/08\/introduction-a-solr-installation-et-configuration-1\/<\/a><\/li>\n<li><a title=\"http:\/\/www.eolya.fr\/2009\/05\/10\/introduction-a-solr-installation-et-configuration-2\/\" href=\"http:\/\/www.eolya.fr\/2009\/05\/10\/introduction-a-solr-installation-et-configuration-2\/\">http:\/\/www.eolya.fr\/2009\/05\/10\/introduction-a-solr-installation-et-configuration-2\/<\/a><\/li>\n<li><a href=\"http:\/\/drupal.org\/node\/532584\">http:\/\/drupal.org\/node\/532584<\/a><\/li>\n<\/ul>\n<h3>Configuration de TomCat<\/h3>\n<h4>Chemin vers SOLR dans les param\u00e8tres de Tomcat<\/h4>\n<ul>\n<li>Dans le manager TomCat (menu D\u00e9marrer =&gt; Configure Tomcat\u00a0 ou C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\bin\\ tomcat6w.exe) allez dans l&#8217;onglet <strong>Java.<\/strong><\/li>\n<li>Ajoutez \u00e0 la fin des <strong>Java options<\/strong> la ligne suivante :\n<pre>-Dsolr.solr.home=&lt;home&gt;<\/pre>\n<p>(sans le \\ final).<\/li>\n<\/ul>\n<h4>Fichiers de conf iguration Tomcat<\/h4>\n<ul>\n<li>Editer le fichier C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\conf\\server.xml :<br \/>\nAjouter <strong>URIEncoding=&#8221;UTF-8&#8243;<\/strong>\u00a0 au noeud <strong>&lt;Connector port=&#8221;8080&#8243; protocol=&#8221;HTTP\/1.1&#8243;<\/strong>&#8230; qui doit d\u00e9sormais ressembler \u00e0 ceci :<\/p>\n<pre>&lt;Connector port=\"8080\" protocol=\"HTTP\/1.1\" connectionTimeout=\"20000\" redirectPort=\"8443\" URIEncoding=\"UTF-8\"\/&gt;<\/pre>\n<\/li>\n<\/ul>\n<ul>\n<li>Dans <strong>C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\conf\\Catalina\\localhost<\/strong> , cr\u00e9ez un fichier <strong>solr.xml<\/strong>\u00a0avec le contenu suivant\u00a0 :\n<pre>&lt;Context docBase=\"&lt;home&gt; \\webapps\\solr.war\" debug=\"0\" crossContext=\"true\" &gt;\r\n\u00a0\u00a0\u00a0 &lt;Environment name=\"solr\/home\" type=\"java.lang.String\" value=\"&lt;home&gt;\\\" override=\"true\" \/&gt;\r\n&lt;\/Context&gt;<\/pre>\n<\/li>\n<\/ul>\n<h4>Fichier de configuration SOLR<\/h4>\n<p>Dans\u00a0&lt;home&gt;, cr\u00e9er le fichier <strong>solr.xml<\/strong> avec le contenu suivant :<\/p>\n<pre>&lt;solr persistent=\"true\" sharedLib=\"lib\"&gt;\r\n &lt;cores adminPath=\"\/admin\/cores\"&gt;\r\n &lt;core name=\"index1\" instanceDir=\"index1\" \/&gt;\r\n &lt;!--&lt;core name=\"index2\" instanceDir=\"index2\"\/&gt;--&gt; \r\n &lt;\/cores&gt;\r\n&lt;\/solr&gt;<\/pre>\n<p>Ce fichier permet de configurer les c\u009curs d&#8217;ex\u00e9cution de chaque index SolR.<br \/>\nPour ce faire, il suffit d&#8217;ajouter une ligne &lt;core name=&#8221;&#8221;\u0085 pour chaque index.<\/p>\n<ul>\n<li><strong>core name<\/strong> : nom du c\u009cur<\/li>\n<li><strong>core instance<\/strong> : nom du dossier correspondant dans\u00a0&lt;home&gt;<\/li>\n<\/ul>\n<h4>Tests<\/h4>\n<ul>\n<li>Red\u00e9marrez Tomcat<\/li>\n<li>Lancez l&#8217;url suivante pour v\u00e9rifier que tout est ok :\n<pre>http:\/\/localhost:8080\/solr\/index1\/admin\/<\/pre>\n<\/li>\n<li>Normalement, les cores apparaissent dans la ligne Cores (si il y en a plusieurs de d\u00e9finis)<\/li>\n<li>En cas de probl\u00e8me, consultez les logs de Tomcat dans <strong>C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\logs<\/strong><\/li>\n<\/ul>\n<h3>Configuration de SolR<\/h3>\n<p>A faire pour chaque index. les fichiers de configuration se trouve dans\u00a0&lt;home&gt;\\&lt;index&gt;\\conf<\/p>\n<h4>schema.xml<\/h4>\n<p>Le fichier schema.xml permet de param\u00e9trer les champs \u00e0 indexer (dans le n\u009cud <strong>fields<\/strong>) et les types de champ\u00a0ainsi que le param\u00e9trage de leur fonctionnement d&#8217;indexation (dans le noeud <strong>types<\/strong>).<\/p>\n<p>Je vous renvoie \u00e0 la documentation pour plus de d\u00e9tail mais voici quelques conseils:<\/p>\n<ul>\n<li>On ne peut indexer que des champs de type solr.TextField.<\/li>\n<li>Pour chaque champ, on peut indiquer si il est index\u00e9 (indexed=&#8221;true&#8221;) et\/ou si il est stock\u00e9 tel quel (stored=&#8221;true&#8221;).<\/li>\n<\/ul>\n<p>Dans notre cas, nous avons d\u00e9fini plusieurs champs :<\/p>\n<table border=\"1\" cellspacing=\"2\" cellpadding=\"2\">\n<tbody>\n<tr>\n<th>Nom<\/th>\n<th>Utilisation<\/th>\n<th>Type<\/th>\n<th>Index\u00e9<\/th>\n<th>Stock\u00e9<\/th>\n<\/tr>\n<tr>\n<td>monID<\/td>\n<td>Cl\u00e9 unique<\/td>\n<td>solr.TrieLongField<\/td>\n<td>oui<\/td>\n<td>oui<\/td>\n<\/tr>\n<tr>\n<td>monTexte<\/td>\n<td>Bloc de texte qui sera affich\u00e9 dans les recherches<\/td>\n<td>solr.TextField<\/td>\n<td>non<\/td>\n<td>oui<\/td>\n<\/tr>\n<tr>\n<td>champ1<\/td>\n<td>Bloc servant pour les recherches (priorit\u00e9 \u00e9lev\u00e9e)<\/td>\n<td>solr.TextField<\/td>\n<td>oui<\/td>\n<td>non<\/td>\n<\/tr>\n<tr>\n<td>champ2<\/td>\n<td>Bloc servant pour les recherches (priorit\u00e9 basse)<\/td>\n<td>solr.TextField<\/td>\n<td>oui<\/td>\n<td>non<\/td>\n<\/tr>\n<tr>\n<td>rubriqueID<\/td>\n<td>La rubrique dans laquelle est class\u00e9 le document<\/td>\n<td>solr.TrieLongField<\/td>\n<td>non<\/td>\n<td>oui<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ce qui nous donne la configuration suivante :<\/p>\n<pre>&lt;fields&gt;\r\n\u00a0\u00a0\u00a0 &lt;field name=\"monID\" type=\"long\" indexed=\"true\" stored=\"true\" required=\"true\"\/&gt;\r\n\u00a0 \u00a0 &lt;field name=\"rubriqueID\" type=\" long \" indexed=\"true\" stored=\"true\" required=\"true\"\/&gt;\r\n\u00a0\u00a0\u00a0 &lt;field name=\"monTexte\" type=\"text\" indexed=\"false\" stored=\"true\" required=\"true\"\/&gt;\r\n\u00a0\u00a0\u00a0 &lt;field name=\"champ1\" type=\"text\" indexed=\"true\" stored=\"false\" required=\"true\"\/&gt;\r\n\u00a0\u00a0\u00a0 &lt;field name=\"champ2\" type=\"text\" indexed=\"true\" stored=\"false\" required=\"false\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0 &lt;dynamicField name=\"*\" type=\"ignored\" \/&gt;\r\n&lt;\/fields&gt;\r\n\r\n&lt;uniqueKey&gt;monID&lt;\/uniqueKey&gt;\r\n&lt;defaultSearchField&gt;champ1&lt;\/defaultSearchField&gt;<\/pre>\n<p>C&#8217;est dans la section <strong>&lt;types&gt;<\/strong> que l&#8217;on d\u00e9finit les param\u00e8tres d&#8217;indexation de chaque type de champ, en param\u00e9trant les analyzers .<br \/>\nVoici un exemple de notre champ de type texte :<\/p>\n<pre>&lt;fieldType name=\"text_fr\" positionIncrementGap=\"100\"&gt;\r\n &lt;analyzer type=\"index\"&gt;\r\n &lt;charFilter mapping=\"mapping-ISOLatin1Accent.txt\"\/&gt;\r\n &lt;tokenizer\/&gt;\r\n &lt;!--&lt;filter ignoreCase=\"true\" words=\"stopwords\/stopwords_fr.txt\" enablePositionIncrements=\"true\" \/&gt;--&gt;\r\n &lt;filter generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"1\" catenateNumbers=\"1\" catenateAll=\"0\" splitOnCaseChange=\"1\"\/&gt;\r\n &lt;filter\/&gt;\r\n &lt;filter language=\"French\" protected=\"protwords.txt\"\/&gt;\r\n &lt;\/analyzer&gt;\r\n\r\n &lt;analyzer type=\"query\"&gt;\r\n &lt;charFilter mapping=\"mapping-ISOLatin1Accent.txt\"\/&gt;\r\n &lt;tokenizer\/&gt;\r\n &lt;!--&lt;filter synonyms=\"synonyms\/synonyms_fr.txt\" ignoreCase=\"true\" expand=\"true\"\/&gt;--&gt;\r\n &lt;!--&lt;filter ignoreCase=\"true\" words=\"stopwords\/stopwords_fr.txt\" enablePositionIncrements=\"true\"\/&gt;--&gt;\r\n &lt;filter generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\" splitOnCaseChange=\"1\"\/&gt;\r\n &lt;filter\/&gt;\r\n &lt;filter language=\"French\" protected=\"protwords.txt\"\/&gt;\r\n &lt;\/analyzer&gt;\r\n&lt;\/fieldType&gt;<\/pre>\n<h4>solrconfig.xml<\/h4>\n<ul>\n<li>Commentez la ligne suivante :\n<pre>&lt;dataDir&gt;${solr.data.dir:.\/solr\/data}&lt;\/dataDir&gt;<\/pre>\n<p>Ceci permet de cr\u00e9er l&#8217;index dans le sous-dossier data et non dans le dossier par d\u00e9faut (C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\solr\\data)<\/li>\n<\/ul>\n<h4>V\u00e9rifier la configuration<\/h4>\n<ul>\n<li>Relancez Tomcat pour prendre en compte les modifications.<\/li>\n<li>V\u00e9rifiez que les champs sont bons dans le Shema Browser :\n<pre>http:\/\/localhost:8080\/solr\/index1\/admin\/schema.jsp<\/pre>\n<\/li>\n<li>En cas d&#8217;erreur, aller voir dans les logs de Tomcat.<\/li>\n<\/ul>\n<h3>Mise \u00e0 jour de l&#8217;index<\/h3>\n<p>La mise \u00e0 jour de l&#8217;index (ajout, mise\u00a0 \u00e0 jour, suppression) se fait tr\u00e8s simplement par l&#8217;envoi en POST d&#8217;un flux xml.\u00a0Chaque \u00e9l\u00e9ment de l&#8217;index est appel\u00e9 <strong>document<\/strong>.<\/p>\n<h4>Ajout,\u00a0 modification.<\/h4>\n<p>La syntaxe est la m\u00eame pour les 2 actions. En fait, si le document existe d\u00e9j\u00e0 (bas\u00e9 sur sa cl\u00e9 unique), il sera mis \u00e0 jour, sinon il sera ajout\u00e9.<br \/>\nOn peut ajouter\/mettre \u00e0 jour plusieurs documents en une seule fois.<br \/>\nVoici la structure du fichier xml \u00e0 envoyer (bas\u00e9 sur notre exemple ci-dessus) :<\/p>\n<pre>&lt;add&gt;\r\n &lt;doc&gt;\r\n &lt;field name=\"monID\"&gt;12&lt;\/field&gt;\r\n &lt;field name=\"rubriqueID\"&gt;5&lt;\/field&gt;\r\n &lt;field name=\"monTexte\"&gt;le texte \u00e0 afficher&lt;\/field&gt;\r\n &lt;field name=\"champ1\"&gt;mots-cl\u00e9 principaux&lt;\/field&gt;\r\n &lt;field name=\"champ2\"&gt;mots-cl\u00e9 secondaires&lt;\/field&gt;\r\n &lt;\/doc&gt;\r\n &lt;doc&gt;\r\n &lt;field name=\"monID\"&gt;13&lt;\/field&gt;\r\n &lt;field name=\"rubriqueID\"&gt;1&lt;\/field&gt;\r\n &lt;field name=\"monTexte\"&gt;le texte \u00e0 afficher&lt;\/field&gt;\r\n &lt;field name=\"champ1\"&gt;mots-cl\u00e9 principaux&lt;\/field&gt;\r\n &lt;field name=\"champ2\"&gt;mots-cl\u00e9 secondaires&lt;\/field&gt;\r\n &lt;\/doc&gt;\r\n&lt;\/add&gt;<\/pre>\n<p>Il faut ensuite envoyer en POST un autre flux xml contenant une commande COMMIT :<br \/>\nLe contenu du flux xml est tout simple :<\/p>\n<pre>&lt;commit\/&gt;<\/pre>\n<p>On peut \u00e9galement appeler une commande pour optimiser l&#8217;index :<\/p>\n<pre>&lt;optimize\/&gt;<\/pre>\n<h4>Suppression de documents<\/h4>\n<p>Le principe est le m\u00eame : on envoie dans un premier temps le flux xml des documents \u00e0 supprimer, puis on effectue un commit.<\/p>\n<p>Le flux xml pour la suppression est simple :<\/p>\n<pre>&lt;delete&gt;\r\n &lt;id&gt;12&lt;\/id&gt;\r\n &lt;id&gt;13&lt;\/id&gt; \r\n&lt;\/delete&gt;<\/pre>\n<p>Notez que l&#8217;on utilise le champ <strong>id<\/strong> et non le nom du champ que l&#8217;on a donn\u00e9 \u00e0 notre cl\u00e9 unique (<strong>monID<\/strong>).<\/p>\n<h4>Exemple d&#8217;appel \u00e0 SolR en ASP<\/h4>\n<p>Voici un exemple de code en ASP pour ajouter et supprimer des documents. Vous remarquerez que l&#8217;on peut tr\u00e8s bien envoyer dans un m\u00eame flux xml des ajouts et des suppressions.<\/p>\n<pre>' On cr\u00e9e le xml\r\nxml = \"&lt;add&gt;\"\r\nxml = xml &amp; \"&lt;doc&gt;\"\r\nxml = xml &amp; \"&lt;field name=\"\"monID\"\"&gt;12&lt;\/field&gt;\"\r\nxml = xml &amp; \"&lt;field name=\"\"rubriqueID\"\"&gt;5&lt;\/field&gt;\"\r\nxml = xml &amp; \"&lt;field name=\"\"monTexte\"\"&gt;\" &amp; Server.HtmlEncode(\"le texte \u00e0 afficher\") &amp; \"&lt;\/field&gt;\"\r\nxml = xml &amp; \"&lt;field name=\"\"champ1\"\"&gt;\" &amp; Server.HtmlEncode(\"mots-cl\u00e9 principaux\") &amp; \"&lt;\/field&gt;\r\nxml = xml &amp; \"&lt;field name=\"\"champ2\"\"&gt;\" &amp; Server.HtmlEncode(\"mots-cl\u00e9 secondaires\") &amp; \"&lt;\/field&gt;\"\r\nxml = xml &amp; \"&lt;\/doc&gt;\"\r\nxml = xml &amp; \"&lt;\/add&gt;\"\r\n\r\nxml = xml &amp; \"&lt;delete&gt;\"\r\nxml = xml &amp; \"&lt;id&gt;13&lt;\/id&gt;\"\r\nxml = xml &amp; \"&lt;\/delete&gt;\"\r\n\r\n' On envoie le contenu Xml vers SolR \r\nSet oXml = Server.CreateObject(\"MSXML2.ServerXMLHTTP.3.0\")\r\n\r\noXml.Open \"POST\", \"http:\/\/localhost:8080\/solr\/index1\/update\", False\r\noXml.setRequestHeader \"Content-Type\", \"text\/xml\"\r\noXml.Send xml \r\nIf oXml.readyState &lt;&gt; 4 Then oXml.waitForResponse 10\r\nretour = solrRetour(oXml.responseText)\r\n\r\n' Commit\r\nIf retour = 0 Then\r\n oXml.Open \"POST\", \" http:\/\/localhost:8080\/solr\/index1\/update\", False\r\n oXml.setRequestHeader \"Content-Type\", \"text\/xml\"\r\n oXml.Send \"&lt;commit\/&gt;\" \r\n If oXml.readyState &lt;&gt; 4 Then oXml.waitForResponse 10\r\n retour = solrRetour(oXml.responseText)\r\nEnd If\r\n\r\n' TRAITEMENT DU FLUX XML DE RETOUR DES COMMANDES SOLR\r\n'----------------------------------------------------\r\nFunction solrRetour(xml)\r\n Dim oXml, Root, lst, retour\r\n\r\n Set oXml = Server.CreateObject(\"MSXML.DOMDocument\")\r\n oXml.Async=False\r\n\r\n If Not oXml.loadXml(xml) Then \r\n retour = -1\r\n Else \r\n\r\n Set Root = oXml.documentElement\r\n Set lst = Root.selectSingleNode(\"lst\")\r\n retour = lst.selectSingleNode(\"int[@name='status']\").text\r\n\r\n End If\r\n\r\n solrRetour = retour\r\nEnd Function<\/pre>\n<h4>R\u00e9f\u00e9rences<\/h4>\n<ul>\n<li><a href=\"http:\/\/wiki.apache.org\/solr\/UpdateXmlMessages\">http:\/\/wiki.apache.org\/solr\/UpdateXmlMessages<\/a><\/li>\n<\/ul>\n<h3>Ex\u00e9cuter des requ\u00eates<\/h3>\n<p>L\u00e0 aussi, l&#8217;ex\u00e9cution de requ\u00eates est tr\u00e8s simple : il suffit d&#8217;interroger une page et de r\u00e9cup\u00e9rer le contenu du flux xml.<\/p>\n<h4>Structure de la requ\u00eate<\/h4>\n<p>Voici un exemple d&#8217;url :<\/p>\n<pre>http:\/\/localhost:8080\/solr\/index1\/select?qt=dismax&amp;q=les+mots+cles&amp;qf=champ1^1+champ2^0.6&amp;start=0&amp;rows=25&amp;fl=monID,monTexte,score&amp;fq=rubriqueID:5<\/pre>\n<p>D\u00e9taillons les param\u00e8tres :<\/p>\n<table border=\"1\" cellspacing=\"2\" cellpadding=\"2\">\n<tbody>\n<tr>\n<th>Champ<\/th>\n<th>Valeur<\/th>\n<\/tr>\n<tr>\n<td>qt (query type)<\/td>\n<td>dismax : ce type de requ\u00eate permet la pond\u00e9ration des champs de recherche<\/td>\n<\/tr>\n<tr>\n<td>q (query)<\/td>\n<td>La liste des mots cl\u00e9s<\/td>\n<\/tr>\n<tr>\n<td>qf (query fields)<\/td>\n<td>Liste des champs dans lesquels doit s&#8217;effectuer la recherche (champs index\u00e9s uniquement).<br \/>\nOn peut pond\u00e9rer ces champs en ajoutant ^x o\u00f9 x est le coefficient de pond\u00e9ration.<\/td>\n<\/tr>\n<tr>\n<td>start, rows<\/td>\n<td>Permet de ne r\u00e9cup\u00e9rer qu&#8217;une partie des r\u00e9sultats pour g\u00e9n\u00e9rer une pagination par exemple.<br \/>\n&#8211; start est la position du 1ere r\u00e9sultat \u00e0 afficher<br \/>\n&#8211; rows est le nombre de r\u00e9sultats \u00e0 r\u00e9cup\u00e9rer.<\/td>\n<\/tr>\n<tr>\n<td>fl (field list)<\/td>\n<td>Liste des champs \u00e0 renvoyer dans le flux xml, s\u00e9par\u00e9s par des virgules.<br \/>\nLe champ sp\u00e9cial score renvoit le score calcul\u00e9 poar SolR<\/td>\n<\/tr>\n<tr>\n<td>fq (filter query)<\/td>\n<td>Permet de restreindre la recherche \u00e0 certaines valeurs de certains champs (ici, on ne r\u00e9cup\u00e8re que les documents de la rubrique n\u00b0 5)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Exemple de code en ASP :<\/p>\n<pre>url = \"http:\/\/localhost:8080\/solr\/index1\/select?...\"\r\n\r\nSet oXmlSolr = Server.CreateObject(\"MSXML2.ServerXMLHTTP\")\r\nSet oXml = Server.CreateObject(\"MSXML.DOMDocument\")\r\n\r\noXml.Async=False\r\noXmlSolr.Open \"GET\", url ,False\r\noXmlSolr.Send()\r\nSet Root = oXml.documentElement\r\nSet result = Root.selectSingleNode(\"result\")\r\nnbResults = result.GetAttribute(\"numFound\")\r\n\r\nFor Each doc in result.ChildNodes\r\n Response..Write (doc.selectSingleNode(\"str[@name='monTexte']\").text)\r\nNext<\/pre>\n<p>http:\/\/vm-win2003-01:8080\/solr\/aafr\/select?indent=on&#038;q=chargeur&#038;rows=10&#038;fl=*+score&#038;qt=dismax&#038;qf=Champ1^1+Champ2^0.6+Champ3^0.3<br \/>\nhttp:\/\/vm-win2003-01:8080\/solr\/aafr\/select?q=moissonneuse&#038;fq=&#038;start=0&#038;rows=100&#038;fl=produitID,HTML,score&#038;qt=dismax&#038;qf=Champ1^0.6+Champ2^0.3+Champ3^0.1<\/p>\n<h4>R\u00e9f\u00e9rences<\/h4>\n<ul>\n<li><a href=\"http:\/\/wiki.apache.org\/solr\/CommonQueryParameters\">http:\/\/wiki.apache.org\/solr\/CommonQueryParameters<\/a><\/li>\n<li><a href=\"http:\/\/wiki.apache.org\/solr\/DisMaxRequestHandler\">http:\/\/wiki.apache.org\/solr\/DisMaxRequestHandler<\/a><\/li>\n<\/ul>\n<h3>R\u00e9plication<\/h3>\n<p>On consid\u00e8re pour cette \u00e9tape qu&#8217;aucun index n&#8217;a encore \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9 (dossier data vide).<\/p>\n<h4>Configuration du serveur ma\u00eetre<\/h4>\n<ul>\n<ul>\n<li>Editez le fichier <strong>solrConfig.xml<\/strong> et d\u00e9commentez et adaptez la partie suivante:<br \/>\n(la section slave doit \u00eatre correctement configur\u00e9e avec l&#8217;adresse du ma\u00eetre et comment\u00e9e.)<\/p>\n<pre>&lt;requestHandler name=\"\/replication\" &gt; \r\n &lt;lst name=\"master\"&gt;\r\n &lt;str name=\"replicateAfter\"&gt;commit&lt;\/str&gt;\r\n &lt;str name=\"replicateAfter\"&gt;optimize&lt;\/str&gt;\r\n &lt;str name=\"replicateAfter\"&gt;startup&lt;\/str&gt;\r\n &lt;str name=\"confFiles\"&gt;solrconfig_slave.xml:solrconfig.xml,schema.xml&lt;\/str&gt;\r\n &lt;\/lst&gt;\r\n &lt;!--\r\n &lt;lst name=\"slave\"&gt;\r\n &lt;str name=\"masterUrl\"&gt;http:\/\/192.168.2.35:8080\/solr\/index1\/replication&lt;\/str&gt;\r\n &lt;str name=\"pollInterval\"&gt;00:00:60&lt;\/str&gt;\r\n &lt;\/lst&gt;\r\n --&gt;\r\n&lt;\/requestHandler&gt;<\/pre>\n<\/li>\n<li>Dupliquez le fichier <strong>solrconfig.xml <\/strong>en <strong>solrconfig_slave.xml.<\/strong><\/li>\n<\/ul>\n<\/ul>\n<p>(ceci permet d&#8217;appliquer toutes les modifications\u00a0 sur le ma\u00eetre et de r\u00e9pliquer la configuration sur les esclaves (le fichier solrconfig_slave.xml sera automatiquement renomm\u00e9 en solrconfig.xml).<\/p>\n<ul>\n<li>Editez le fichier <strong>solrconfig_slave.xml<\/strong>, commentez la partie <strong>master<\/strong> et d\u00e9commentez la partie <strong>slave<\/strong>.<\/li>\n<li>Red\u00e9marrez Tomcat.<\/li>\n<\/ul>\n<div>Attention : Toute modif apport\u00e9e \u00e0 solrconfig.xml devra \u00e9galement l&#8217;\u00eatre sur solrconfig_slave.xml.<\/div>\n<h4>Sur l&#8217;esclave<\/h4>\n<ul>\n<li>Installez Tomcat et Solr en suivant la proc\u00e9dure jusqu&#8217;\u00e0 l&#8217;\u00e9tape &#8220;Configuration de Tomcat&#8221; incluse mais ne red\u00e9marrez pas Tomcat tout de suite.<\/li>\n<li>Recopiez lecontenu du dossier de l&#8217;index du ma\u00eetre dans le dossier de l&#8217;index correspondant sur l&#8217;esclave.<\/li>\n<li>Renommez <strong>solrconfig_slave.xml<\/strong>\u00a0en <strong>sorlconfig.xml.<\/strong><\/li>\n<li>Lancez Tomcat.<\/li>\n<li>V\u00e9rifiez que la r\u00e9plication fonctionne en appelant cette url directement sur le serveur esclave :\n<pre>http:\/\/&lt;ip_esclave&gt;:8080\/solr\/aa\/admin\/replication\/<\/pre>\n<\/li>\n<\/ul>\n<h4>R\u00e9f\u00e9rences<\/h4>\n<ul>\n<li><a href=\"http:\/\/wiki.apache.org\/solr\/SolrReplication\">http:\/\/wiki.apache.org\/solr\/SolrReplication<\/a><\/li>\n<li><a href=\"http:\/\/techgurulive.com\/2009\/12\/14\/how-to-configure-apache-solr-replication\/\">http:\/\/techgurulive.com\/2009\/12\/14\/how-to-configure-apache-solr-replication\/<\/a><\/li>\n<\/ul>\n<h3>Compl\u00e9ments d&#8217;information<\/h3>\n<h4>Gestion des accents et similitudes<\/h4>\n<p>ex : \u00e9l\u00e9vateur, elevateur, \u00e9levateur<br \/>\nUtilisez un champ text sp\u00e9cifique avec le filtre suivant (analyzer index + query) :<\/p>\n<pre>&lt;charFilter mapping=\"mapping-ISOLatin1Accent.txt\"\/&gt;<\/pre>\n<h4>Configurer les index pour une indexationavec une base de donn\u00e9es MySQL<\/h4>\n<p>On peut\u00a0indexer directement une base de donn\u00e9es MySQL. Voici une \u00e9bauche concernant la fa\u00e7on de param\u00e9trer l&#8217;indexation MySQL (non<br \/>\ntest\u00e9e).<\/p>\n<h5>R\u00e9cup\u00e9rer le driver JDBC MySQL<\/h5>\n<p>Copier le fichier <strong>mysql-connector-java-&lt;version&gt;-bin.jar<\/strong> dans\u00a0&lt;home&gt;\\lib.<\/p>\n<p>http:\/\/mvnrepository.com\/artifact\/mysql\/mysql-connector-java\/5.1.5<\/p>\n<p>https:\/\/code.google.com\/p\/stavkovakancelaria\/downloads\/detail?name=mysql-connector-java-5.1.5-bin.jar&#038;can=2&#038;q=<\/p>\n<h5>Param\u00e9trer l&#8217;acc\u00e8s aux donn\u00e9es<\/h5>\n<ul>\n<li>Dans le dossier <strong>conf<\/strong>,\u00a0cr\u00e9ez un fichier <strong>dataconfig.xml<\/strong>, copiez le code ci-dessous et adaptez-le (champs en rouge) :\n<pre>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;dataConfig&gt;\r\n &lt;dataSource type=\"JdbcDataSource\" driver=\"com.mysql.jdbc.Driver\" url=\"jdbc:mysql:\/\/localhost\/database\" user=\"user\" password=\"password\"\/&gt;\r\n\r\n &lt;document name=\"doc\"&gt;\r\n &lt;entity name=\"jos_content\"\r\n query=\"SELECT * FROM matable WHERE state=1\"\r\n deltaImportQuery=\"SELECT * FROM matable WHERE tableID='${dataimporter.delta.job_jobs_id}'\"\r\n deltaQuery=\"SELECT tableID FROM matable WHERE modified &gt; '${dataimporter.last_index_time}'\"&gt;\r\n\r\n &lt;field column =\"tableID\" name=\"monID\" \/&gt;\r\n &lt;field column=\"tableTexte\" name=\"monTexte\" \/&gt;\r\n &lt;field column=\"rubriqueID\" name=\"rubriqueID\" \/&gt;\r\n &lt;\/entity&gt;\r\n &lt;\/document&gt;\r\n&lt;\/dataConfig&gt;<\/pre>\n<\/li>\n<li>Dans le fichier\u00a0<strong>solrconf.xml<\/strong>,\u00a0 ajoutez le requestHandler suivant :\n<pre>&lt;requestHandler name=\"\/dataimport\"&gt;\r\n &lt;lst name=\"defaults\"&gt;\r\n &lt;str name=\"config\"&gt;dataconfig.xml&lt;\/str&gt;\r\n &lt;\/lst&gt;\r\n&lt;\/requestHandler&gt;<\/pre>\n<\/li>\n<li>Dans le fichier\u00a0<strong>solrconf.xml<\/strong>,\u00a0 commentez la ligne <strong>&lt;dataDir&gt;.<\/strong><\/li>\n<li>Lancer l&#8217;indexation compl\u00e8te avec l&#8217;url suivante :\n<pre>http:\/\/vm-win2003-01:8080\/solr\/aafr\/dataimport?command=full-import<\/pre>\n<\/li>\n<\/ul>\n<h5>Probl\u00e8me de m\u00e9moire<\/h5>\n<p>Si vous obtenez un message d&#8217;erreur indiquant un probl\u00e8me de m\u00e9moire, ajouter\u00a0<strong>batchSize=&#8221;-1&#8243;<\/strong> \u00e0 la connexion mysql dans <strong>dataconfig.xml<\/strong>, ce qui nous donne :<\/p>\n<pre>&lt;dataSource type=\"JdbcDataSource\" driver=\"com.mysql.jdbc.Driver\" url=\"jdbc:mysql:\/\/localhost\/database\" batchSize=\"-1\" user=\"user\" password=\"password\"\/&gt;<\/pre>\n<h5>R\u00e9f\u00e9rences<\/h5>\n<ul>\n<li><a href=\"http:\/\/www.cabotsolutions.com\/blog\/200905\/using-solr-lucene-for-full-text-search-with-mysql\/\">http:\/\/www.cabotsolutions.com\/blog\/200905\/using-solr-lucene-for-full-text-search-with-mysql\/<\/a><\/li>\n<li><a href=\"http:\/\/wiki.apache.org\/solr\/DataImportHandlerFaq\">http:\/\/wiki.apache.org\/solr\/DataImportHandlerFaq<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Administrating Solr Tika in Action Apache Solr 4 Cookbook Apache Solr High Performance LIWP_SolrSearchforDatabaseProgrammers tutorial Indexing_txt_html_SolR Lucid Imagination_ECommerce-WP Pr\u00e9voir le module de connection mysq\/jdbc pour les DIH : Solr schema construction http:\/\/leblogdundsi.lesprost.fr\/article34\/moteur-de-recherche-solr-sous-windows-tomcat SolR est&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":2847,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"youtube_video":null,"_links":{"self":[{"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/posts\/2362"}],"collection":[{"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2362"}],"version-history":[{"count":0,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/posts\/2362\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/media\/2847"}],"wp:attachment":[{"href":"https:\/\/www.extradrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2362"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2362"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}