1 32 33 package com.knowgate.lucene; 34 35 import java.util.Arrays ; 36 import java.util.Date ; 37 import java.util.Comparator ; 38 import java.io.IOException ; 39 40 import org.apache.lucene.document.*; 41 import org.apache.lucene.search.*; 42 import org.apache.lucene.queryParser.*; 43 import org.apache.lucene.analysis.SimpleAnalyzer; 44 45 import com.knowgate.debug.DebugFile; 46 import com.knowgate.misc.Gadgets; 47 48 53 public class MailSearcher { 54 55 public MailSearcher() { 56 } 57 58 76 public static MailRecord[] search (String sLuceneIndexPath, 77 String sWorkArea, String sFolderName, 78 String sSender, String sRecipient, 79 String sSubject, String sFromDate, 80 String sToDate, String sText, int iLimit, 81 Comparator oSortBy) 82 throws ParseException, IOException , NullPointerException { 83 84 if (null==sLuceneIndexPath) 85 throw new NullPointerException ("MailSearcher.search() luceindex parameter cannot be null"); 86 87 if (null==sWorkArea) 88 throw new NullPointerException ("MailSearcher.search() workarea parameter cannot be null"); 89 90 if (DebugFile.trace) { 91 DebugFile.writeln("Begin MailSearcher.search("+sLuceneIndexPath+","+ 92 sWorkArea+","+sFolderName+","+sSender+","+sRecipient+","+ 93 sSubject+","+sFromDate+","+sToDate+","+sText+","+ 94 String.valueOf(iLimit)+")"); 95 DebugFile.incIdent(); 96 } 97 98 MailRecord[] aRetArr; 99 100 String sQry = "workarea:"+sWorkArea; 101 102 if (null!=sFolderName) sQry += " AND container:\""+sFolderName+"\""; 103 104 if (null!=sSender) sQry += " AND author:\""+Gadgets.ASCIIEncode(sSender)+"\""; 105 106 if (null!=sRecipient) sQry += " AND recipients:\""+Gadgets.ASCIIEncode(sRecipient)+"\""; 107 108 if (null!=sSubject) sQry += " AND title:\""+Gadgets.ASCIIEncode(sSubject)+"\""; 109 110 if (sFromDate!=null && sToDate!=null) 111 sQry += " AND created:["+Gadgets.removeChar(sFromDate,'-')+" TO "+Gadgets.removeChar(sToDate,'-')+"]"; 112 else if (sFromDate!=null) 113 sQry += " AND created:["+Gadgets.removeChar(sFromDate,'-')+" TO 21991231]"; 114 else if (sToDate!=null) 115 sQry += " AND created:[19790101 TO "+Gadgets.removeChar(sToDate,'-')+"]"; 116 117 if (null!=sText) sQry += " AND text:\""+Gadgets.ASCIIEncode(sText)+"\""; 118 119 QueryParser oQpr = new QueryParser("text", new SimpleAnalyzer()); 120 if (DebugFile.trace) DebugFile.writeln("QueryParser.parse("+sQry+")"); 121 Query oQry = oQpr.parse(sQry); 122 123 if (DebugFile.trace) DebugFile.writeln("new IndexSearcher("+sLuceneIndexPath+")"); 124 IndexSearcher oSearch = new IndexSearcher(sLuceneIndexPath); 125 126 if (iLimit>0) { 127 TopDocs oTopSet = oSearch.search(oQry, null, iLimit); 128 if (oTopSet.scoreDocs!=null) { 129 ScoreDoc[] oTopDoc = oTopSet.scoreDocs; 130 int iDocCount = oTopDoc.length; 131 aRetArr = new MailRecord[iDocCount]; 132 for (int d=0; d<iDocCount; d++) { 133 String [] aAbstract = Gadgets.split(oSearch.doc(oTopDoc[d].doc).get("abstract"), '¨'); 134 aRetArr[d] = new MailRecord(aAbstract[0], aAbstract[1], aAbstract[2], 135 aAbstract[3], aAbstract[4], aAbstract[5], 136 sFolderName); 137 } } else { 139 aRetArr = null; 140 } 141 } else { 142 Hits oHitSet = oSearch.search(oQry); 143 int iHitCount = oHitSet.length(); 144 if (iHitCount>0) { 145 aRetArr = new MailRecord[iHitCount]; 146 for (int h=0; h<iHitCount; h++) { 147 String [] aAbstract = Gadgets.split(oHitSet.doc(h).get("abstract"), '¨'); 148 aRetArr[h] = new MailRecord(aAbstract[0], aAbstract[1], aAbstract[2], 149 aAbstract[3], aAbstract[4], aAbstract[5], 150 sFolderName); 151 } } else { 153 aRetArr = null; 154 } 155 } 157 if (oSortBy!=null) { 158 Arrays.sort(aRetArr, oSortBy); 159 } 160 161 if (DebugFile.trace) { 162 DebugFile.decIdent(); 163 if (null==aRetArr) 164 DebugFile.writeln("End MailSearcer.search() : no records found"); 165 else 166 DebugFile.writeln("End MailSearcer.search() : "+String.valueOf(aRetArr.length)); 167 } 168 return aRetArr; 169 } } 171 | Popular Tags |