001 package railo.runtime.search.lucene2; 002 003 import java.io.IOException; 004 005 import org.apache.lucene.analysis.Analyzer; 006 import org.apache.lucene.document.Document; 007 import org.apache.lucene.search.Hits; 008 009 import railo.runtime.search.SearchException; 010 import railo.runtime.search.SearchResulItem; 011 import railo.runtime.search.lucene2.highlight.Highlight; 012 013 public class SearchResulItemHits implements SearchResulItem { 014 015 016 017 private Hits hits; 018 private int index; 019 private Object highlighter; 020 private Analyzer analyzer; 021 private String id; 022 private String categoryTree; 023 private String category; 024 private int maxNumFragments; 025 private int maxLength; 026 private Document doc; 027 028 public SearchResulItemHits(Hits hits, int index, Object highlighter,Analyzer analyzer, 029 String id, String categoryTree, String category,int maxNumFragments, int maxLength) { 030 this.hits=hits; 031 this.index=index; 032 this.highlighter=highlighter; 033 this.analyzer=analyzer; 034 this.id=id; 035 this.categoryTree=categoryTree; 036 this.category=category; 037 this.maxNumFragments=maxNumFragments; 038 this.maxLength=maxLength; 039 } 040 041 @Override 042 public String getAuthor() { 043 return doc("author"); 044 } 045 046 @Override 047 public String getCategory() { 048 return category; 049 } 050 051 @Override 052 public String getCategoryTree() { 053 return categoryTree; 054 } 055 056 @Override 057 public String getCustom1() { 058 return doc("custom1"); 059 } 060 061 @Override 062 public String getCustom2() { 063 return doc("custom2"); 064 } 065 066 @Override 067 public String getCustom3() { 068 return doc("custom3"); 069 } 070 071 @Override 072 public String getCustom4() { 073 return doc("custom4"); 074 } 075 076 public String getCustom(int index) throws SearchException { 077 if(index==1) return doc("custom1"); 078 if(index==2) return doc("custom2"); 079 if(index==3) return doc("custom3"); 080 if(index==4) return doc("custom4"); 081 082 throw new SearchException("invalid index ["+index+"], valid index is [1,2,3,4]"); 083 } 084 085 @Override 086 public String getId() { 087 return id; 088 } 089 090 @Override 091 public String getKey() { 092 return doc("key"); 093 } 094 095 @Override 096 public String getMimeType() { 097 return doc("mime-type"); 098 } 099 100 public int getRecordsSearched() { 101 // TODO Auto-generated method stub 102 return 0; 103 } 104 105 106 @Override 107 public float getScore() { 108 try { 109 return hits.score(index); 110 } catch (IOException e) { 111 return 0; 112 } 113 } 114 115 @Override 116 public String getSize() { 117 return doc("size"); 118 } 119 120 @Override 121 public String getSummary() { 122 return doc("summary"); 123 } 124 125 @Override 126 public String getTitle() { 127 return doc("title"); 128 } 129 130 @Override 131 public String getUrl() { 132 return doc("url"); 133 } 134 135 /** FUTURE add to interface 136 * @return the contextSummary 137 */ 138 public String getContextSummary() { 139 String contextSummary=""; 140 if(maxNumFragments>0){ 141 contextSummary=Highlight.createContextSummary(highlighter,analyzer,doc("contents"),maxNumFragments,maxLength,""); 142 } 143 return contextSummary; 144 } 145 146 private String doc(String field) { 147 if(doc==null){ 148 try { 149 doc=hits.doc(index); 150 } catch (IOException e) { 151 e.printStackTrace(); 152 } 153 } 154 return doc.get(field); 155 } 156 }