1 16 package scriptella.driver.lucene; 17 18 import org.apache.lucene.index.IndexReader; 19 import scriptella.driver.text.TextProviderException; 20 import scriptella.spi.*; 21 import scriptella.util.IOUtils; 22 23 import java.io.IOException ; 24 import java.io.Reader ; 25 import java.net.URL ; 26 import java.util.Set ; 27 import java.util.TreeSet ; 28 29 36 public class LuceneConnection extends AbstractConnection { 37 38 private static final String [] EMPTY_ARRAY = new String [] {}; 39 40 private URL url; 41 private Set <String > fields; 42 private static final String DEFAULT_FIELD = "contents"; 43 private Boolean useMultiFieldQueryParser; 44 private Boolean useLowercaseExpandedTerms; 45 46 50 public LuceneConnection(ConnectionParameters parameters) { 51 super(Driver.DIALECT_IDENTIFIER, parameters); 52 url = parameters.getResolvedUrl(); 53 parseFields((String )parameters.getProperty("fields")); 54 useMultiFieldQueryParser = parameters.getBooleanProperty("useMultiFieldQueryParser", false); 55 useLowercaseExpandedTerms = parameters.getBooleanProperty("useLowercaseExpandedTerms", true); 56 } 57 58 59 60 public void executeScript(Resource scriptContent, ParametersCallback parametersCallback) throws ProviderException { 61 throw new UnsupportedOperationException ("Script execution is not supported yet"); 62 } 63 64 73 public synchronized void executeQuery(Resource queryContent, ParametersCallback parametersCallback, QueryCallback queryCallback) throws ProviderException{ 74 LuceneQuery query = null; 75 Reader r; 76 try { 77 r = queryContent.open(); 78 } catch (IOException e) { 79 throw new TextProviderException("Cannot open a query for reading", e); 80 } 81 try { 82 query = new LuceneQuery(url.getFile(), parametersCallback, queryCallback); 83 query.execute(r, fields, useMultiFieldQueryParser, useLowercaseExpandedTerms); 84 } finally { 85 IOUtils.closeSilently(query); 86 } 87 } 88 89 92 public void close() throws ProviderException { 93 } 94 95 99 private void parseFields(String s) { 100 if (s == null) { 101 fields = new TreeSet <String >(); 102 fields.add(DEFAULT_FIELD); 103 } else { 104 String [] strings = (' '+s+' ').split(","); 105 fields = new TreeSet <String >(); 106 for (int i = 0; i < strings.length; i++) { 107 strings[i]=strings[i].trim(); 108 if ("".equals(strings[i])) { 109 fields.add(DEFAULT_FIELD); } else if ("*".contains(strings[i])) { 111 try { 112 IndexReader ir = IndexReader.open(url.getFile()); 113 fields.addAll(ir.getFieldNames(IndexReader.FieldOption.INDEXED)); 114 } catch (IOException e) { 115 throw new LuceneProviderException("Failed to open lucene index.",e); 116 } 117 } else { 118 fields.add(strings[i]); 119 } 120 121 } 122 } 123 } 124 125 } 126 | Popular Tags |