Mercurial Hosting > luan
diff 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 |
line wrap: on
line diff
--- a/src/luan/modules/lucene/LuceneIndex.java Thu Jun 15 17:55:47 2023 -0600 +++ b/src/luan/modules/lucene/LuceneIndex.java Sun Jun 25 15:05:09 2023 -0600 @@ -27,6 +27,9 @@ import org.apache.lucene.util.NumericUtils; import org.apache.lucene.search.Query; import org.apache.lucene.search.MatchAllDocsQuery; +import org.apache.lucene.search.BooleanQuery; +import org.apache.lucene.search.BooleanClause; +import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.Sort; import org.apache.lucene.search.SortField; @@ -198,12 +201,6 @@ } } - private static Term term(String key,long value) { - BytesRef br = new BytesRef(); - NumericUtils.longToPrefixCoded(value,0,br); - return new Term(key,br); - } - public void delete(String queryStr) throws IOException, ParseException, LuanException { @@ -460,11 +457,24 @@ close(openSearcher()); } - public int advanced_search( final Luan luan, String queryStr, LuanFunction fn, Integer n, String sortStr ) + public int advanced_search( final Luan luan, Object queryStr, LuanFunction fn, Integer n, String sortStr ) throws LuanException, IOException, ParseException { - Utils.checkNotNull(queryStr); - Query query = GoodQueryParser.parseQuery(mfp,queryStr); + Query query; + if( queryStr instanceof String ) { + query = GoodQueryParser.parseQuery(mfp,(String)queryStr); + } else if( queryStr instanceof LuanTable ) { + LuanTable t = (LuanTable)queryStr; + BooleanQuery bq = new BooleanQuery(); + for( Map.Entry<Object,Object> entry : t.rawIterable() ) { + String name = (String)entry.getKey(); + Object value = entry.getValue(); + Query q = new TermQuery( LuceneUtils.term(name,value) ); + bq.add( q, BooleanClause.Occur.MUST ); + } + query = bq; + } else + throw new LuanException("query must be string or table"); IndexSearcher searcher = threadLocalSearcher.get(); boolean inTransaction = searcher != null; if( !inTransaction )