comparison lucene/src/luan/modules/lucene/LuceneIndex.java @ 620:89eb02f9827f

add Lucene all_search_terms_must_match()
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 04 Jan 2016 17:27:36 -0700
parents 5e495e4e560b
children fd15da41afca
comparison
equal deleted inserted replaced
619:cc3a68033179 620:89eb02f9827f
47 import org.apache.lucene.search.IndexSearcher; 47 import org.apache.lucene.search.IndexSearcher;
48 import org.apache.lucene.search.TotalHitCountCollector; 48 import org.apache.lucene.search.TotalHitCountCollector;
49 import org.apache.lucene.search.ScoreDoc; 49 import org.apache.lucene.search.ScoreDoc;
50 import org.apache.lucene.search.Collector; 50 import org.apache.lucene.search.Collector;
51 import org.apache.lucene.search.Scorer; 51 import org.apache.lucene.search.Scorer;
52 import org.apache.lucene.search.BooleanClause;
52 import sane.lucene.queryparser.SaneQueryParser; 53 import sane.lucene.queryparser.SaneQueryParser;
53 import sane.lucene.queryparser.FieldParser; 54 import sane.lucene.queryparser.FieldParser;
54 import sane.lucene.queryparser.MultiFieldParser; 55 import sane.lucene.queryparser.MultiFieldParser;
55 import sane.lucene.queryparser.StringFieldParser; 56 import sane.lucene.queryparser.StringFieldParser;
56 import sane.lucene.queryparser.NumberFieldParser; 57 import sane.lucene.queryparser.NumberFieldParser;
82 private IndexSearcher searcher; 83 private IndexSearcher searcher;
83 private final ThreadLocal<IndexSearcher> threadLocalSearcher = new ThreadLocal<IndexSearcher>(); 84 private final ThreadLocal<IndexSearcher> threadLocalSearcher = new ThreadLocal<IndexSearcher>();
84 private boolean isClosed = false; 85 private boolean isClosed = false;
85 private final MultiFieldParser mfp; 86 private final MultiFieldParser mfp;
86 public final LuanTable indexed_only_fields = new LuanTable(); 87 public final LuanTable indexed_only_fields = new LuanTable();
88 public BooleanClause.Occur defaultOccur = BooleanClause.Occur.SHOULD;
87 89
88 public LuceneIndex(LuanState luan,String indexDirStr,FieldParser defaultFieldParser,String[] defaultFields) throws LuanException, IOException { 90 public LuceneIndex(LuanState luan,String indexDirStr,FieldParser defaultFieldParser,String[] defaultFields) throws LuanException, IOException {
89 mfp = defaultFieldParser==null ? new MultiFieldParser() : new MultiFieldParser(defaultFieldParser,defaultFields); 91 mfp = defaultFieldParser==null ? new MultiFieldParser() : new MultiFieldParser(defaultFieldParser,defaultFields);
90 mfp.fields.put( "type", STRING_FIELD_PARSER ); 92 mfp.fields.put( "type", STRING_FIELD_PARSER );
91 mfp.fields.put( "id", NumberFieldParser.LONG ); 93 mfp.fields.put( "id", NumberFieldParser.LONG );
128 NumericUtils.longToPrefixCoded(value,0,br); 130 NumericUtils.longToPrefixCoded(value,0,br);
129 return new Term(key,br); 131 return new Term(key,br);
130 } 132 }
131 133
132 public void delete(LuanState luan,String queryStr) throws LuanException, IOException, ParseException { 134 public void delete(LuanState luan,String queryStr) throws LuanException, IOException, ParseException {
133 Query query = SaneQueryParser.parseQuery(mfp,queryStr); 135 Query query = SaneQueryParser.parseQuery(mfp,queryStr,defaultOccur);
134 136
135 boolean commit = !writeLock.isHeldByCurrentThread(); 137 boolean commit = !writeLock.isHeldByCurrentThread();
136 writeLock.lock(); 138 writeLock.lock();
137 try { 139 try {
138 writer.deleteDocuments(query); 140 writer.deleteDocuments(query);
342 close(openSearcher()); 344 close(openSearcher());
343 } 345 }
344 346
345 public int advanced_search( final LuanState luan, String queryStr, LuanFunction fn, Integer n, String sortStr ) throws LuanException, IOException, ParseException { 347 public int advanced_search( final LuanState luan, String queryStr, LuanFunction fn, Integer n, String sortStr ) throws LuanException, IOException, ParseException {
346 Utils.checkNotNull(luan,queryStr); 348 Utils.checkNotNull(luan,queryStr);
347 Query query = SaneQueryParser.parseQuery(mfp,queryStr); 349 Query query = SaneQueryParser.parseQuery(mfp,queryStr,defaultOccur);
348 IndexSearcher searcher = threadLocalSearcher.get(); 350 IndexSearcher searcher = threadLocalSearcher.get();
349 boolean inTransaction = searcher != null; 351 boolean inTransaction = searcher != null;
350 if( !inTransaction ) 352 if( !inTransaction )
351 searcher = openSearcher(); 353 searcher = openSearcher();
352 try { 354 try {