Dans Solr, un RequestHandler est essentiellement un plugin (module de logique) qui gère les demandes entrantes d'une manière particulière.
Plutôt que de "faire" des trucs à la requête de recherche, demande, les gestionnaires peuvent fournir des fonctionnalités au-delà des requêtes, comme par exemple l'importation de données.
Normalement, les gestionnaires de demandes dans Solr sont configurés pour être précis des extrémités (c'est à dire l'URL), et n'est pas sélectionnée par le biais de l' intervalle qt paramètre. Toutefois, la recherche spécifique, les gestionnaires peuvent utiliser le type de requête de paramètre à gérer une requête d'une manière spécifique (c'est à dire un gestionnaire peut être en mesure de faire face à divers types de requêtes).
Ce gestionnaire à utiliser, normalement dépendent de ce que vous voulez atteindre. Je voudrais vous suggérer de consulter la liste de gestionnaires, et correspondent à leurs descriptions (beaucoup ont des pages Wiki) de ce que vous voulez faire.
Pour les requêtes, autre que la valeur par défaut SearchHandler, le plus couramment utilisé à la demande du gestionnaire de la DisMaxRequestHandler (qt=dismax), qui sont essentiellement une recherche sur plusieurs champs à l'aide de différents pondération basé sur le champ de signification. Cela est souvent appelé par les gens comme "Google" comme de la recherche.
Aussi, vous pouvez être intéressé à regarder le MoreLikeThisHandler, qui a été conçu pour fournir des résultats qui sont similaires à un document spécifique (par exemple à partir d'un précédent résultat de recherche).
Notez que comme une source de confusion, la DisMaxRequestHandler dans les versions plus récentes de Solr est en fait fournie par le défaut SearchHandler avec un type de requête de dismax.
Les gestionnaires sont configurés dans solrconfig.xml:
<requestHandler name="dismax" class="solr.SearchHandler" >
<lst name="defaults">
<str name="defType">dismax</str>
<str name="echoParams">explicit</str>
<float name="tie">0.01</float>
<str name="qf">
id^10.0 keyword^1.5 title^1.0 region^0.5 country^0.5 city^0.5
</str>
<str name="pf">
keyword^1.5 title^1.0 region^0.5 country^0.5 city^0.5
</str>
<str name="bf">
</str>
<str name="mm">
2<-1 5<-2 6<90%
</str>
<int name="ps">100</int>
<str name="q.alt">*:*</str>
<!-- example highlighter config, enable per-query with hl=true -->
<str name="hl.fl">text features name</str>
<!-- for this field, we want no fragmenting, just highlighting -->
<str name="f.name.hl.fragsize">0</str>
<!-- instructs Solr to return the field itself if no query terms are
found -->
<str name="f.name.hl.alternateField">name</str>
<str name="f.text.hl.fragmenter">regex</str> <!-- defined below -->
</lst>
Dans ce cas, qf sont les champs et les stimule à appliquer pour chaque champ. La configuration ci-dessus va rechercher dans l'id, mot-clé, titre, région, pays et de la ville. Découvrez le correspondant de la page Wiki pour plus d'info (DisMaxRequestHandler s'applique).
Le moyen le plus efficace de les utiliser est certainement d'abord savoir exactement ce que vous voulez atteindre, puis de trouver le meilleur compromis en termes de gestionnaire, puis par la suite régler la configuration de fournir les résultats que vous et votre communauté pourrait s'attendre.
Réponse écrivains sont des plugins (modules de logique) qui fournira les moyens d'écrire les réponses dans des formats spécifiques. Actuellement, ce concept s'applique surtout à des recherches, où vous ferez face à des dérivés de la QueryResponseWriter, qui à son tour seront sélectionnés par le format de la réponse de paramètre wt (dans la requête).
Si vous travaillez avec PHP, alors vous serez certainement intéressé à générer PHP amicale des réponses à vos demandes, à l'aide de wt=php ou wt=phps.
Le php réponse peut être evaled:
$code = file_get_contents('http://localhost:8983/solr/select?q=iPod&wt=php');
eval("\$result = " . $code . ";");
print_r($result);
et le phps réponse peut être lu avec PHP mécanisme de sérialisation de:
$serializedResult = file_get_contents('http://localhost:8983/solr/select?q=iPod&wt=phps');
$result = unserialize($serializedResult);
print_r($result);
Il ya un soutien pour les autres (comme Ruby, Python, Java Binaire, etc), qui ont été la construction pour le rendre plus facile pour les développeurs d'intégrer SOLR dans leurs applications web à l'aide de mécanismes qui sont plus rapides que l'analyse de XML ou JSON.
Cependant, il existe également d'autres types de ResponseWriter qui fait de transformer la réponse basée sur un modèle (par exemple la Vitesse) ou une transformation (par exemple, XSLT). Cela peut être utile dans certaines situations, lorsque vous ne voulez pas dépendre d'une autre application pour traiter les résultats de la requête (par exemple XSLT directement en XHTML).
Réponse Écrivains sont également configurés dans le solrconfig.xmlnormalement vous permettra à ceux qui vous intéressent par exemple:
<queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
<queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
<queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
<queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
Le moyen le plus efficace de les utiliser dépend de votre environnement et de ce que vous voulez atteindre. Évidemment, si vous êtes en PHP, un phps peut vous donner une meilleure (facile d'accès par le biais de la langue) et plus rapide (intégré dans le mécanisme de sérialisation, moins verbeux) résultats. Si en Javascript, json peut être que le chemin à parcourir etc.
Vous voyez, SOLR est un outil puissant et polyvalent plattform :)
Si vous souhaitez trouver un chemin à travers la jungle, vous pouvez recourir à certains livres, comme "Solr 1.4 Enterprise Search Server" (bien que je ne suis pas sûr qu'il fait vraiment le meilleur travail possible en introduction). Beaucoup de choses que vous pouvez mieux déterminer par essais et erreurs ainsi que de la patience et de l'aide en ligne.
Espérons que cela aide pour y arriver.