knguyen     2005/01/07 18:28:53 CET

  Modified files:        (Branch: JAHIA-4-0-BRANCH)
    src/java/org/jahia/services/search 
                                       JahiaSearchResultHandlerImpl.java 
  Log:
  - fix search relevance
  
  Revision  Changes    Path
  1.2.2.6   +47 -6     
jahia/src/java/org/jahia/services/search/JahiaSearchResultHandlerImpl.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaSearchResultHandlerImpl.java.diff?r1=1.2.2.5&r2=1.2.2.6&f=h
  
  
  
  Index: JahiaSearchResultHandlerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaSearchResultHandlerImpl.java,v
  retrieving revision 1.2.2.5
  retrieving revision 1.2.2.6
  diff -u -r1.2.2.5 -r1.2.2.6
  --- JahiaSearchResultHandlerImpl.java 27 Oct 2004 15:02:43 -0000      1.2.2.5
  +++ JahiaSearchResultHandlerImpl.java 7 Jan 2005 17:28:53 -0000       1.2.2.6
  @@ -75,7 +75,10 @@
     public JahiaSearchResult buildSearchResult( Collection parsedObjects,
                                                 ParamBean jParams,
                                                 boolean oneHitByPage){
  -       JahiaSearchResult result =
  +
  +     Hashtable hitScores = new Hashtable();
  +
  +     JahiaSearchResult result =
              new JahiaSearchResult (this,parsedObjects);
   
          if (parsedObjects == null || parsedObjects.isEmpty())
  @@ -94,6 +97,7 @@
          String workflowStateVal = null;
          boolean found = false;
          int pagecount = 0;
  +       int effectiveHitCount = 0;
          ParsedObject parsedObject = null;
   
          Iterator iterator = parsedObjects.iterator();
  @@ -124,6 +128,7 @@
                          JahiaBaseACL acl = new JahiaBaseACL 
(contentField.getAclID ());
                          if (aPage != null && aPage.checkReadAccess 
(currentUser)
                                  && acl.getPermission (currentUser, 
JahiaBaseACL.READ_RIGHTS)) {
  +                          effectiveHitCount++;
                              found = false;
                              for (int j = 0; j < result.getHitCount(); j++) { 
// page already found
                                  JahiaSearchHit searchHit = (JahiaSearchHit)
  @@ -148,9 +153,19 @@
                                          }
                                      } else {
                                          if ( contentField.getType() != 
FieldTypes.FILE ){
  -                                           searchHit.wordcount = (searchHit.
  +                                           searchHit.wordcount += 1;
  +
  +                                           List hitScoreList = 
(List)hitScores.get(new Integer(j+1));
  +                                           int hitScore = 0;
  +                                           if ( hitScoreList == null ){
  +                                                     hitScoreList = new 
ArrayList();
  +                                           }
  +                                           hitScoreList.add(new 
Float(parsedObject.getScore()));
  +
  +                                           /*
  +                                           (searchHit.
                                                  wordcount + new 
Float(parsedObject.getScore() *
  -                                               100).intValue()) / 2;
  +                                               100).intValue()) / 2;*/
                                          }
                                      }
                                      break;
  @@ -159,10 +174,14 @@
   
                              if ( !oneHitByPage || (oneHitByPage && !found) ) {
                                  if ( !oneHitByPage ){
  -                                   if ( contentField.getType() == 
FieldTypes.FILE || !found ){
  -                                       info = new JahiaSearchHit 
(parsedObject);
  -                                       info.wordcount = new 
Float(parsedObject.
  +                                   if ( contentField.getType() == 
FieldTypes.FILE )
  +                                   {
  +                                             info = new JahiaSearchHit 
(parsedObject);
  +                                             info.wordcount = new 
Float(parsedObject.
                                              getScore() * 100).intValue();
  +                                   } else if ( !found ){
  +                                             info = new JahiaSearchHit 
(parsedObject);
  +                                             info.wordcount = 1;
                                      } else {
                                          continue;
                                      }
  @@ -229,6 +248,9 @@
                                  } catch (Throwable t) {
                                  }
                                  result.addHit (info);
  +                               List hitScoreList = new ArrayList();
  +                               hitScoreList.add(new 
Float(parsedObject.getScore()));
  +                               hitScores.put(new 
Integer(result.getHitCount()),hitScoreList);
                                  pagecount++;
                              }
                          }
  @@ -239,6 +261,25 @@
              }
          }
   
  +       if ( !oneHitByPage ){
  +           // compute score overage
  +           for (int j = 0; j < result.getHitCount(); j++) {
  +               JahiaSearchHit searchHit = (JahiaSearchHit)
  +                                          result.results().elementAt(j);
  +               List hitScoreList = (List) hitScores.get(new Integer(j + 1));
  +               iterator = hitScoreList.iterator();
  +               Float score = null;
  +               float f = 0;
  +               if (searchHit.type != FieldTypes.FILE) {
  +                   while (iterator.hasNext()) {
  +                       score = (Float) iterator.next();
  +                       f += score.floatValue();
  +                   }
  +                   searchHit.wordcount = new Float((f * 100) / 
hitScoreList.size()).intValue();
  +               }
  +           }
  +       }
  +
          // sort the result
          if (result.getHitCount () > 1) {
              Collections.sort(result.results ());
  

Reply via email to