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 ());