2012-01-25 7 views
1

Je voudrais savoir comment il est possible d'obtenir des scores différents pour un résultat de recherche à plusieurs termes?Solr - résultats de recherche identiques pour plusieurs termes de recherche?

Certains résultats dans solr ont le même score même s'il y a plusieurs termes dans la requête, comme vous le verrez dans l'exemple ci-dessous.

J'ai deux index dans Solr, contenant chacun: id, first_name, last_name Chaque indice se présente comme suit:

<doc> 
    <str name="id">1</str> 
    <str name="last_name">fisher</str> 
    <str name="name">john</str> 
</doc> 

<doc> 
    <str name="id">2</str> 
    <str name="last_name">darby</str> 
    <str name="name">john</str> 
</doc> 

Quand je QUERY "john" les résultats viennent. C'est parfait. Cependant, lorsque je demande "john fisher", les deux résultats se présentent mais avec le même score. Ce que je veux, ce sont des scores différents basés sur la pertinence des termes de recherche.

Voici le résultat pour la requête suivante http://localhost:8983/solr/select?q=john+fisher%0D%0A&rows=10&fl= *% de 2Cscore

<response> 
    ... 
    <result name="response" numFound="2" start="0" maxScore="0.85029894"> 
     <doc> 
      <float name="score">0.85029894</float> 
      <str name="id">1</str> 
      <str name="last_name">fisher</str> 
      <str name="name">john</str> 
     </doc> 

     <doc> 
     <float name="score">0.85029894</float> 
      <str name="id">2</str> 
      <str name="last_name">darby</str> 
      <str name="name">john</str> 
     </doc> 
    </result> 
</response> 

Toute aide serait grandement appréciée

+0

Vérifiez cela: [Recherche dans deux champs] (http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_search_for_.22superman.22_in_both_the_title_and_subject_fields) – aitchnyu

Répondre

3

Votre meilleur pari est de comprendre & analyser comment les différents facteurs qui affectent votre pointage de documents, Lucene a la fonctionnalité utile Explanation, Solr tirer parti de ceci pour fournir comment la notation est calculée, vous pouvez utiliser 'debugQuery' dans Solr pour voir comment il est dérivé,

?q=john&fl=score,*&rows=2&debugQuery=on 

Réponse Ex:

<lst name="debug"> 
    <str name="rawquerystring">john</str> 
    <str name="querystring">john</str> 
    <str name="parsedquery">+DisjunctionMaxQuery((text:john))</str> 
    <str name="parsedquery_toString">+(text:john)</str> 
    <lst name="explain"> 
     <!-- Score calulation for Result#1 --> 
     <str> 
      2.1536596 = (MATCH) fieldWeight(text:john in 36722), product of: 
      1.0 = tf(termFreq(text:john)=1) 
      8.614638 = idf(docFreq=7591, maxDocs=15393998) 
      0.25 = fieldNorm(field=text, doc=36722) 
     </str> 
     <!-- Score calulation for Result#2 --> 
     <str> 
      2.1536596 = (MATCH) fieldWeight(text:john in 36724), product of: 
      1.0 = tf(termFreq(text:john)=1) 
      8.614638 = idf(docFreq=7591, maxDocs=15393998) 
      0.25 = fieldNorm(field=text, doc=36724) 
     </str> 
    </lst> 

En outre, vous pouvez utiliser explainOther pour savoir comment un certain document ne correspond pas à la requête.

?q=john&fl=score,*&rows=2&debugQuery=on&explainOther=on 

Do Lire:

1

Il me semble que vous ne recherchez sur le champ "nom". C'est pourquoi les scores sont les mêmes. Si vous utilisez DisMax vous pouvez facilement rechercher sur les deux champs et le plus pertinent aura un score plus élevé.

par exemple.

<str name="defType">edismax</str> 
<str name="qf">name last_name</str> 

Une autre façon est de combiner les 2 champs dans 1 champ avec copyField et que la recherche dans le domaine nouvellement créé.

0

Merci pour la réponse rapide les gars, je l'apprécie.

À partir de la requête d'explication, j'ai pu identifier qu'en effet la recherche n'a été effectuée que sur un seul champ.

J'ai vu qu'il est possible d'ajouter plusieurs champs au même champ pour la recherche. Dans le schéma.xml J'ajouté ce qui suit:

<copyField source="last_name" dest="text"/> 

Les résultats sont maintenant comme prévu lors de l'utilisation de plus d'un terme de recherche.

Questions connexes