LuceneSuggest.java :  » Search-Engine » snapper » org » enhydra » snapper » wrapper » lucene » Java Open Source

Java Open Source » Search Engine » snapper 
snapper » org » enhydra » snapper » wrapper » lucene » LuceneSuggest.java
/**
 * 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;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.