2010-03-11 25 views
13

Je naviguais sur le Web à la recherche d'un cadre d'indexation et de recherche et tombé sur Solr. Une fonctionnalité dont nous avons absolument besoin est de booster les résultats en fonction du champ qui contient le hit.Boost Solr résultats basés sur le champ qui contenait le coup

Un petit exemple:

Tenir compte un dossier comme celui-ci:

<movie> 
    <title>The Dark Knight</title> 
    <alternative_title>Batman Begins 2</alternative_title> 
    <year>2008</year> 
    <director>Christopher Nolan</director> 
    <plot>Batman, Gordon and Harvey Dent are forced to deal with the chaos unleashed by an anarchist mastermind known only as the Joker, as it drives each of them to their limits.</plot> 
</movie> 

Je veux combiner par exemple le titre, alternative_title et l'intrigue champs dans un champ de recherche, ce qui est pas trop difficile après regarder la documentation Solr/Lucene et les tutoriels. Cependant, je veux aussi que les films qui ont un hit dans le titre ont un score plus élevé que les hits sur alternative_title et ceux à leur tour devraient marquer plus de points que les hits dans le champ intrigue. Existe-t-il un moyen d'indiquer ce type de notation dans le XML ou devons-nous développer un algorithme de notation personnalisé?

Veuillez également noter que l'exemple que j'ai donné est fictif et que les données réelles contiendront probablement plus de 100 champs.

Merci à l'avance,

Tom

Répondre

6

Je ne l'ai pas utilisé Solr, mais je l'ai utilisé Lucene. En regardant:

http://wiki.apache.org/solr/SolrQuerySyntax

Il indique que la syntaxe de requête de Solr est une surcouche de Lucene de. Et Lucene, la façon dont vous pouvez effectuer par champ boosts est d'utiliser l'opérateur de la carotte suivie par une valeur arbitraire, à savoir

title:batman^10 alternative_title:batman

L'avantage de le faire à temps de requête est que vous pouvez modifier la augmentez la valeur à la volée pour correspondre à n'importe quelle norme de pertinence que vous avez. Donc, si une valeur de boost de 10 est trop élevée, vous pouvez le modifier en conséquence.

11

C'est ce que DismaxQueryParser de Solr a été conçu pour. Voir http://wiki.apache.org/solr/DisMaxRequestHandler

Il y a beaucoup de paramètres, mais le principal que vous devez personnaliser est "qf", qui est la façon dont vous spécifiez les champs qui doivent être recherchés et le boost pour chacun. Donc, si vous voulez titre de dominer, vous pouvez spécifier quelque chose comme:

titre^10^2 alternative_title directeur^1^1 parcelle

que la valeur du paramètre QF. Vous pouvez configurer ceci en personnalisant l'exemple de configuration et expérimenter à partir de là.