comparison src/luan/modules/lucene/LuceneIndex.java @ 1771:c62324841dfb

improve NumberFieldParser and add key map lucene query
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 25 Jun 2023 15:05:09 -0600
parents 527c53b91a50
children
comparison
equal deleted inserted replaced
1770:6c01d54edcac 1771:c62324841dfb
25 import org.apache.lucene.util.Version; 25 import org.apache.lucene.util.Version;
26 import org.apache.lucene.util.BytesRef; 26 import org.apache.lucene.util.BytesRef;
27 import org.apache.lucene.util.NumericUtils; 27 import org.apache.lucene.util.NumericUtils;
28 import org.apache.lucene.search.Query; 28 import org.apache.lucene.search.Query;
29 import org.apache.lucene.search.MatchAllDocsQuery; 29 import org.apache.lucene.search.MatchAllDocsQuery;
30 import org.apache.lucene.search.BooleanQuery;
31 import org.apache.lucene.search.BooleanClause;
32 import org.apache.lucene.search.TermQuery;
30 import org.apache.lucene.search.TopDocs; 33 import org.apache.lucene.search.TopDocs;
31 import org.apache.lucene.search.Sort; 34 import org.apache.lucene.search.Sort;
32 import org.apache.lucene.search.SortField; 35 import org.apache.lucene.search.SortField;
33 import org.apache.lucene.search.IndexSearcher; 36 import org.apache.lucene.search.IndexSearcher;
34 import org.apache.lucene.search.TotalHitCountCollector; 37 import org.apache.lucene.search.TotalHitCountCollector;
196 wrote(); 199 wrote();
197 writeLock.unlock(); 200 writeLock.unlock();
198 } 201 }
199 } 202 }
200 203
201 private static Term term(String key,long value) {
202 BytesRef br = new BytesRef();
203 NumericUtils.longToPrefixCoded(value,0,br);
204 return new Term(key,br);
205 }
206
207 public void delete(String queryStr) 204 public void delete(String queryStr)
208 throws IOException, ParseException, LuanException 205 throws IOException, ParseException, LuanException
209 { 206 {
210 Query query = GoodQueryParser.parseQuery(mfp,queryStr); 207 Query query = GoodQueryParser.parseQuery(mfp,queryStr);
211 208
458 455
459 public void ensure_open() throws IOException { 456 public void ensure_open() throws IOException {
460 close(openSearcher()); 457 close(openSearcher());
461 } 458 }
462 459
463 public int advanced_search( final Luan luan, String queryStr, LuanFunction fn, Integer n, String sortStr ) 460 public int advanced_search( final Luan luan, Object queryStr, LuanFunction fn, Integer n, String sortStr )
464 throws LuanException, IOException, ParseException 461 throws LuanException, IOException, ParseException
465 { 462 {
466 Utils.checkNotNull(queryStr); 463 Query query;
467 Query query = GoodQueryParser.parseQuery(mfp,queryStr); 464 if( queryStr instanceof String ) {
465 query = GoodQueryParser.parseQuery(mfp,(String)queryStr);
466 } else if( queryStr instanceof LuanTable ) {
467 LuanTable t = (LuanTable)queryStr;
468 BooleanQuery bq = new BooleanQuery();
469 for( Map.Entry<Object,Object> entry : t.rawIterable() ) {
470 String name = (String)entry.getKey();
471 Object value = entry.getValue();
472 Query q = new TermQuery( LuceneUtils.term(name,value) );
473 bq.add( q, BooleanClause.Occur.MUST );
474 }
475 query = bq;
476 } else
477 throw new LuanException("query must be string or table");
468 IndexSearcher searcher = threadLocalSearcher.get(); 478 IndexSearcher searcher = threadLocalSearcher.get();
469 boolean inTransaction = searcher != null; 479 boolean inTransaction = searcher != null;
470 if( !inTransaction ) 480 if( !inTransaction )
471 searcher = openSearcher(); 481 searcher = openSearcher();
472 try { 482 try {