/**
* Milin Radivoj, Jan 11, 2006
* rmilin@gmail.com
*/
package org.enhydra.snapper.wrapper.lucene;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.MultiReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermEnum;
/**
* @author Milin Radivoj
*/
public class LuceneSuggest {
public Vector suggest(Properties sites, String text) {
Vector result = new Vector();
IndexReader[] listReader = null;
try {
long startTime = System.currentTimeMillis();
String[] targetIdArray = text.split(" ");
String rootText = "";
for (int i = 0; i < targetIdArray.length - 1; i++) {
rootText = rootText + targetIdArray[i] + " ";
}
listReader = new IndexReader[sites.size()];
int i = 0;
for (Enumeration e = sites.propertyNames(); e.hasMoreElements();) {
String siteName = (String) e.nextElement();
String indexDir = (String) sites.getProperty(siteName);
listReader[i] = IndexReader.open(indexDir);
i++;
}
MultiReader mr = new MultiReader(listReader);
String suggestString = targetIdArray[targetIdArray.length - 1];
//trik da ubrzamo stvari
if (suggestString.length() == 1)
suggestString = suggestString + "a";
suggestString = suggestString.toLowerCase();
Term suggestTerm = new Term("contents", suggestString);
TermEnum te = mr.terms(suggestTerm);
if (te != null) {
do {
try {
if (te.term().text().startsWith(suggestString)) {
String sugg = te.term().text();
if (sugg.length() > 2 && chack(sugg)) {
result.add(rootText + te.term().text());
}
} else {
break;
}
} catch (Exception e) {
e.printStackTrace();
}
} while (((System.currentTimeMillis() - startTime) < 1000)
&& (result.size() < 10) && te.next());
}
return result;
} catch (Exception e) {
e.printStackTrace();
return new Vector();
} finally {
if (listReader != null) {
try {
for (int i = 0; i < listReader.length; i++) {
if (listReader[i] != null) {
listReader[i].close();
}
}
} catch (IOException e) {
}
}
}
}
public boolean chack(String suggestion) {
if (suggestion == null)
return false;
if (suggestion.indexOf("<") != -1)
return false;
if (suggestion.indexOf(">") != -1)
return false;
if (suggestion.indexOf("~") != -1)
return false;
if (suggestion.indexOf("`") != -1)
return false;
if (suggestion.indexOf("!") != -1)
return false;
if (suggestion.indexOf("@") != -1)
return false;
if (suggestion.indexOf("#") != -1)
return false;
if (suggestion.indexOf("$") != -1)
return false;
if (suggestion.indexOf("^") != -1)
return false;
if (suggestion.indexOf("&") != -1)
return false;
if (suggestion.indexOf("*") != -1)
return false;
if (suggestion.indexOf("(") != -1)
return false;
if (suggestion.indexOf(")") != -1)
return false;
if (suggestion.indexOf("-") != -1)
return false;
if (suggestion.indexOf("_") != -1)
return false;
if (suggestion.indexOf("+") != -1)
return false;
if (suggestion.indexOf("=") != -1)
return false;
if (suggestion.indexOf("{") != -1)
return false;
if (suggestion.indexOf("}") != -1)
return false;
if (suggestion.indexOf("[") != -1)
return false;
if (suggestion.indexOf("]") != -1)
return false;
if (suggestion.indexOf(":") != -1)
return false;
if (suggestion.indexOf(";") != -1)
return false;
if (suggestion.indexOf("\"") != -1)
return false;
if (suggestion.indexOf("'") != -1)
return false;
if (suggestion.indexOf(",") != -1)
return false;
if (suggestion.indexOf(".") != -1)
return false;
if (suggestion.indexOf("?") != -1)
return false;
if (suggestion.indexOf("/") != -1)
return false;
if (suggestion.indexOf("|") != -1)
return false;
if (suggestion.indexOf("\\") != -1)
return false;
if (suggestion.indexOf("1") != -1)
return false;
if (suggestion.indexOf("2") != -1)
return false;
if (suggestion.indexOf("3") != -1)
return false;
if (suggestion.indexOf("4") != -1)
return false;
if (suggestion.indexOf("5") != -1)
return false;
if (suggestion.indexOf("6") != -1)
return false;
if (suggestion.indexOf("7") != -1)
return false;
if (suggestion.indexOf("8") != -1)
return false;
if (suggestion.indexOf("9") != -1)
return false;
if (suggestion.indexOf("0") != -1)
return false;
return true;
}
}
|