comparison src/goodjava/lucene/api/LuceneUtils.java @ 1460:3ab0d043370f

start lucene.api
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 23 Mar 2020 00:04:42 -0600
parents
children e5d48b85351c
comparison
equal deleted inserted replaced
1459:b04b8fc5f4f4 1460:3ab0d043370f
1 package goodjava.lucene.api;
2
3 import java.util.Map;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.ArrayList;
7 import org.apache.lucene.document.Document;
8 import org.apache.lucene.index.IndexableField;
9 import org.apache.lucene.index.Term;
10 import org.apache.lucene.util.BytesRef;
11 import org.apache.lucene.util.NumericUtils;
12
13
14 public final class LuceneUtils {
15 private LuceneUtils() {} // never
16
17 public static Object getValue(IndexableField ifld) {
18 BytesRef br = ifld.binaryValue();
19 if( br != null )
20 return br.bytes;
21 Number n = ifld.numericValue();
22 if( n != null )
23 return n;
24 String s = ifld.stringValue();
25 if( s != null )
26 return s;
27 throw new RuntimeException("invalid field type for "+ifld);
28 }
29
30 public static Map<String,Object> toMap(Document doc) {
31 if( doc==null )
32 return null;
33 Map<String,Object> map = new HashMap<String,Object>();
34 for( IndexableField ifld : doc ) {
35 String name = ifld.name();
36 Object value = getValue(ifld);
37 Object old = map.get(name);
38 if( old == null ) {
39 map.put(name,value);
40 } else {
41 List list;
42 if( old instanceof List ) {
43 list = (List)old;
44 } else {
45 list = new ArrayList();
46 list.add(old);
47 map.put(name,list);
48 }
49 list.add(value);
50 }
51 }
52 return map;
53 }
54
55 public static Term term(String name,Object value) {
56 if( value instanceof String ) {
57 return new Term(name,(String)value);
58 } else if( value instanceof Long ) {
59 BytesRef br = new BytesRef();
60 NumericUtils.longToPrefixCoded((Long)value,0,br);
61 return new Term(name,br);
62 } else
63 throw new RuntimeException("invalid value type "+value.getClass()+"' for term '"+name+"'");
64 }
65
66 }