package railo.runtime.search.lucene2;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.search.Hits;
import railo.runtime.search.SearchException;
import railo.runtime.search.SearchResulItem;
import railo.runtime.search.lucene2.highlight.Highlight;
public class SearchResulItemHits implements SearchResulItem {
private Hits hits;
private int index;
private Object highlighter;
private Analyzer analyzer;
private String id;
private String categoryTree;
private String category;
private int maxNumFragments;
private int maxLength;
private Document doc;
public SearchResulItemHits(Hits hits, int index, Object highlighter,Analyzer analyzer,
String id, String categoryTree, String category,int maxNumFragments, int maxLength) {
this.hits=hits;
this.index=index;
this.highlighter=highlighter;
this.analyzer=analyzer;
this.id=id;
this.categoryTree=categoryTree;
this.category=category;
this.maxNumFragments=maxNumFragments;
this.maxLength=maxLength;
}
@Override
public String getAuthor() {
return doc("author");
}
@Override
public String getCategory() {
return category;
}
@Override
public String getCategoryTree() {
return categoryTree;
}
@Override
public String getCustom1() {
return doc("custom1");
}
@Override
public String getCustom2() {
return doc("custom2");
}
@Override
public String getCustom3() {
return doc("custom3");
}
@Override
public String getCustom4() {
return doc("custom4");
}
public String getCustom(int index) throws SearchException {
if(index==1) return doc("custom1");
if(index==2) return doc("custom2");
if(index==3) return doc("custom3");
if(index==4) return doc("custom4");
throw new SearchException("invalid index ["+index+"], valid index is [1,2,3,4]");
}
@Override
public String getId() {
return id;
}
@Override
public String getKey() {
return doc("key");
}
@Override
public String getMimeType() {
return doc("mime-type");
}
public int getRecordsSearched() {
// TODO Auto-generated method stub
return 0;
}
@Override
public float getScore() {
try {
return hits.score(index);
} catch (IOException e) {
return 0;
}
}
@Override
public String getSize() {
return doc("size");
}
@Override
public String getSummary() {
return doc("summary");
}
@Override
public String getTitle() {
return doc("title");
}
@Override
public String getUrl() {
return doc("url");
}
/** FUTURE add to interface
* @return the contextSummary
*/
public String getContextSummary() {
String contextSummary="";
if(maxNumFragments>0){
contextSummary=Highlight.createContextSummary(highlighter,analyzer,doc("contents"),maxNumFragments,maxLength,"");
}
return contextSummary;
}
private String doc(String field) {
if(doc==null){
try {
doc=hits.doc(index);
} catch (IOException e) {
e.printStackTrace();
}
}
return doc.get(field);
}
}