Mercurial Hosting > luan
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 { |