2014-07-20 4 views
0

Disons que nous avons une structure comme celle-ci par entrée qui va à solr. Le document est d'abord modifié et sauvegardé. La façon dont il est modifié en ce moment, c'est que nous perdons le lien entre le nombre et le score. Cependant, nous pourrions changer cela en quelque chose d'autre, si nécessaire.Solr Augmenter la pertinence du résultat de recherche basé sur une carte de mot: valeur

"keywords" : [ 
      { 
        "score" : 1, 
        "content" : "great finisher" 
      }, 
      { 
        "score" : 1, 
        "content" : "project" 
      }, 
      { 
        "score" : 1, 
        "content" : "staying" 
      }, 
      { 
        "score" : 1, 
        "content" : "staying motivated" 
      } 
    ] 

Ce que nous voulons est de donner un coup de pouce à un résultat de la requête Solr à un document en utilisant la valeur « score » dans le cas où la requête contient le mot/colocalisation auquel le score est associé. Ainsi, chaque document a une "carte" différente de mot-clé avec un score. Et la pertinence serait calculée normalement comme le fait Solr maintenant, mais avec un boost selon cette carte et les mots présents dans la requête. D'après ce que j'ai vu, nous pouvons donner des boosts aux résultats selon certains critères, mais ce critère est très dynamique - dépendant du contexte. Je ne sais pas comment mettre en œuvre ou par où commencer.

Répondre

0

Pour le moment, il n'y a pas de support intégré dans Solr pour faire quelque chose comme ça. Le moyen le plus idéal serait de faire amplifier chaque terme dans un champ à valeurs multiples séparément, mais ceci n'est pas possible actuellement (la progression (bien qu'il n'y en ait aucune) est suivie en SOLR-2499).

Il existe cependant des moyens de contourner ce problème; deux sont suggérés dans le traqueur de problème ci-dessus. Je ne peux pas en dire beaucoup sur l'utilisation de charges utiles et d'un BoostingTermQuery personnalisé, mais l'utilisation de champs dynamiques est une possibilité. Les inconvénients sont la gestion de vos tailles de cache si vous avez de nombreux noms de champs différents et requête/tri par la plupart d'entre eux. Si vous avez un petit index avec moins de termes, cela fonctionnera, mais un plus grand (dans les cinq et six chiffres les plus élevés) avec beaucoup de champs dynamiques va rapidement consommer votre mémoire (comme pour chaque tri/requête aura un cache de recherche avec un int/long tableau dans la même taille que votre nombre de documents.

une autre suggestion serait de regarder using function queries together with a boost. Si vous faites référence à champ ici à la place, vous pouvez éviter le problème du cache. Essayez-le!

Questions connexes