Diple, utilisation de Solr
Solr est un serveur d'indexation et de recherche java/lucene. La distribution de Solr par défaut est conçue pour un seul gros index. Le déploiement dans Diple consiste à pouvoir ouvrir un index différent par corpus, avec son schéma spécifique d'indexation.
Installation java servlet
L'installation diffère selon les systèmes et les objectifs (serveur en exploitation ou poste de développement) mais partage les étapes suivantes :
- Java, préférer le jdk 6 de Sun.
- Servlet, (serveur java) préférer jetty6, jetty5 possible, testé avec tomcat6 et tomcat5.5 (ne marche pas avec tomcat5), requiert le déploiement d'applications par fichiers de contexte et JNDI (ex: jetty, Tomcat)
Notes d'installation pour quelques systèmes
- Ubuntu Koala 09.10
-
# installer java6 et le paquet jetty sudo apt-get install sun-java6-jdk jetty libjetty-extra # créer manuellement un dossier webapps sudo mkdir -p /usr/share/java/webapps # indiquer manuellement que l'on veut que jetty démarre sudo sed -ri -e 's/^(NO_START=1)/#\1/' /etc/default/jetty # copier des libs JNDI absentes du paquet Ubuntu # vérifier que /usr/share/jetty/lib comporte jetty-plus-*.jar, # sinon télécharger celui qui correspond à la version de la distribution # est nécessaire pour le support JNDI (passage de paramètres à une servlet) # tout arrêter sudo /etc/init.d/jetty stop # démarrer jetty sudo /etc/init.d/jetty start # si tout marche, lire : http://localhost:8080/ [ OK ]
- Debian Lenny (pas de paquet jetty, ni tomcat6)
-
# vérifier qu'il n'y a pas déjà un tomcat5 installé sudo apt-get remove tomcat5 # installer java6 sudo apt-get install sun-java6-jdk # installer tomcat5.5 sudo apt-get install tomcat5.5 tomcat5.5-webapps # regarder si ça marche lynx http://localhost:8180/ # autoriser tomcat à lire des fichiers extérieurs au webapps (solr dans Diple) sudo sed -ri -e 's/TOMCAT5_SECURITY=yes/TOMCAT5_SECURITY=no/' /etc/init.d/tomcat5.5 # déclarer l'encodage UTF-8 pour les paramètres GET (par défaut Tomcat interprète les paramètres d'URI en ISO-8859-1) sudo sed -ri -e 's/Connector port="8180" maxHttpHeaderSize="8192"/Connector port="8180" URIEncoding="UTF-8" maxHttpHeaderSize="8192"/' /etc/tomcat5.5/server.xml # redémarrer Tomcat sudo /etc/init.d/tomcat5.5 stop sudo /etc/init.d/tomcat5.5 start # vérifier que tout marche encore lynx http://localhost:8180/
Faire sortir un serveur de servlet par le port 80 avec Apache.httpd
Diple ne requière pas que le serveur Solr sorte sur l'internet, il peut agir comme un proxy, toutefois, à des fins de déboguage ou d'expérimentations, il peut être utile de voir voir Solr sur l'Internet, tout en respectant les consignes habituelles de l'administration système (n'ouvrir que le port 80 sur l'http).
Le principe consiste à utiliser mod_proxy, de manière à ce qu'Apache redirige certaines requêtes vers une application servlet. Cette manière est plus simple est plus légère qu'avec mod_jk qui d'ailleurs ne fonctionnerait pas avec Jetty. Les pratiques de configuration d'Apache varient selon les systèmes. Trouvez ici une manipulation qui a fonctionné sous des systèmes de type Debian.
Ajouter un fichier de configuration à Apache dans /etc/apache2/conf.d/
,
par exemple server.conf
. Ajuster le port et le préfixe Apache.
ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /solr/ http://localhost:8180/ ProxyPassReverse /solr/ http://localhost:8180/
Procéder aux commandes suivantes :
# charger le module proxy générique sudo a2enmod proxy # charger le module proxy http sudo a2enmod proxy_http # redémarrer apache sudo /etc/init.d/apache2 restart
Fichiers de contexte
Afin de pouvoir tirer tout le potentiel de la librairie d'indexation, les instances Solr (un contexte) sont multipliées pour un même serveur de servlet, permettant notamment d'arrêter, démarrer, rafraîchir ou indexer avec une application sans affecter les autres. Ce dispositif est obtenu avec des fichiers de contexte, sans répliquer le code Solr (lien absolu vers un même solr.war). Les serveurs de servlet Jetty et Tomcat permettent le déploiement d'applications de cette manière. Les fonctionnalités sont similaires, mais pas les syntaxes. Trouvez ci-dessous des modèles ayant fonctionné. Ils sont placés dans le dossier solr d'un corpus Diple. Solr est en effet conçu pour pouvoir fonctionner sur des dossiers déportés, contenant la configuration, les index lucene, voire des librairies spécifiques. Un lien symbolique est effectué entre le fichier de contexte, et le répertoire de configuration des serveurs de servlet (ex: /var/lib/tomcat5.5/conf/Catalina/localhost/, /etc/jetty6/contexts/).
<?xml version="1.0" encoding="utf-8"?> <!-- Fichier de contexte générique pour créer des instances Solr par corpus. Les chemins sont à modifier selon l'environnement. http://tomcat.apache.org/tomcat-6.0-doc/config/context.html --> <Context docBase="solr.war" debug="0" crossContext="true" reloadable="true" override="true"> <Environment name="solr/home" type="java.lang.String" value="diple/corpus/solr/" override="true"/> </Context>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> <!-- Fichier de contexte pour un Solr sur Jetty Les chemins sont à modifier selon l'environnement. http://docs.codehaus.org/display/JETTY/ContextDeployer --> <New id="corpus" class="org.mortbay.jetty.webapp.WebAppContext"> <!-- Nécessaire à jetty pour avoir JNDI, attention nécessite jetty-plus*.jar --> <Set name="ConfigurationClasses"> <Array id="plusConfig" type="java.lang.String"> <Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item> <Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item> <Item>org.mortbay.jetty.plus.webapp.Configuration</Item> <Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item> <Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item> </Array> </Set> <Call class="org.mortbay.log.Log" name="debug"><Arg>Corpus, démarrage de Solr</Arg></Call> <!-- Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set --> <Set name="contextPath">/corpus</Set> <Set name="war">solr.war</Set> <New class="org.mortbay.jetty.plus.naming.EnvEntry"> <Arg><Ref id='corpus'/></Arg> <Arg type="String">solr/home</Arg> <Arg>diple/corpus/solr/</Arg> <Arg type="boolean">true</Arg> </New> </New>
Dossier Solr dans un corpus
- corpus/solr/
- Un SOLR_HOME standard.
- corpus.xml
- Fichier de contexte généré automatiquement (voir plus haut, ne pas commiter)
- conf/
- solrconfig.xml
- Fichier de configuration solr, permet notamment de définir les paramètres par défaut de requête.
- schema.xml
- Types et champs de l'index.
- xslt/
- solr_corpus.xsl
- Transformation par défaut des requêtes Solr pour l'application
- corpus/transform
-
- ducange_solr.xsl
- Transformation d'indexation du corpus, selon le schéma d'indexation.