comparison lucene/src/luan/modules/lucene/Lucene.luan @ 536:3058870cbe83

add Luan.number_type and Lucene.query.range
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 01 Jun 2015 00:27:45 -0600
parents 8a217fe5b4f3
children 919b9410008e
comparison
equal deleted inserted replaced
535:289908469e02 536:3058870cbe83
1 java() 1 java()
2 local Luan = require "luan:Luan" 2 local Luan = require "luan:Luan"
3 local pairs = Luan.pairs 3 local pairs = Luan.pairs
4 local ipairs = Luan.ipairs 4 local ipairs = Luan.ipairs
5 local type = Luan.type 5 local type = Luan.type
6 local number_type = Luan.number_type
6 local error = Luan.error 7 local error = Luan.error
7 local Table = require "luan:Table" 8 local Table = require "luan:Table"
8 local LuceneIndex = require "java:luan.modules.lucene.LuceneIndex" 9 local LuceneIndex = require "java:luan.modules.lucene.LuceneIndex"
9 local Term = require "java:org.apache.lucene.index.Term" 10 local Term = require "java:org.apache.lucene.index.Term"
10 local TermQuery = require "java:org.apache.lucene.search.TermQuery" 11 local TermQuery = require "java:org.apache.lucene.search.TermQuery"
12 local TermRangeQuery = require "java:org.apache.lucene.search.TermRangeQuery"
13 local NumericRangeQuery = require "java:org.apache.lucene.search.NumericRangeQuery"
11 local MatchAllDocsQuery = require "java:org.apache.lucene.search.MatchAllDocsQuery" 14 local MatchAllDocsQuery = require "java:org.apache.lucene.search.MatchAllDocsQuery"
12 local BooleanQuery = require "java:org.apache.lucene.search.BooleanQuery" 15 local BooleanQuery = require "java:org.apache.lucene.search.BooleanQuery"
13 local BooleanClause = require "java:org.apache.lucene.search.BooleanClause" 16 local BooleanClause = require "java:org.apache.lucene.search.BooleanClause"
14 local Sort = require "java:org.apache.lucene.search.Sort" 17 local Sort = require "java:org.apache.lucene.search.Sort"
15 local SortField = require "java:org.apache.lucene.search.SortField" 18 local SortField = require "java:org.apache.lucene.search.SortField"
75 local iter = pairs(t) 78 local iter = pairs(t)
76 local field, value = iter() 79 local field, value = iter()
77 field and value or error "missing term" 80 field and value or error "missing term"
78 iter()==nil or error "only one term allowed" 81 iter()==nil or error "only one term allowed"
79 field = index.map_field_name(field) 82 field = index.map_field_name(field)
80 return TermQuery.new(Term.new(field,value)) 83 local tp = type(value)
84 if tp == "string" then
85 return TermQuery.new(Term.new(field,value))
86 end
87 if tp == "number" then
88 return queryTbl.range(field,value,value)
89 end
90 error("invalid term value type: "..tp)
81 end 91 end
82 92
93 function queryTbl.range(field,min,max,include_min,include_max)
94 if include_min == nil then include_min = true end
95 if include_max == nil then include_max = true end
96 field = index.map_field_name(field)
97 local tp = type(min)
98 tp == type(max) or error "min and max types don't match"
99 if tp == "string" then
100 return TermRangeQuery.newStringRange(field,min,max,include_min,include_max)
101 end
102 if tp == "number" then
103 tp = number_type(min)
104 tp == number_type(max) or error "min and max number types don't match"
105 if tp == "integer" then
106 return NumericRangeQuery.newIntRange(field,min,max,include_min,include_max)
107 end
108 if tp == "long" then
109 return NumericRangeQuery.newLongRange(field,min,max,include_min,include_max)
110 end
111 if tp == "double" then
112 return NumericRangeQuery.newDoubleRange(field,min,max,include_min,include_max)
113 end
114 error("invalid term value type: "..tp)
115 end
116 error("invalid term value type: "..tp)
117 end
118
83 function queryTbl.boolean(t) 119 function queryTbl.boolean(t)
84 local boolean_query = BooleanQuery.new() 120 local boolean_query = BooleanQuery.new()
85 for query, occur_string in pairs(t) do 121 for query, occur_string in pairs(t) do
86 local occur = BooleanClause.Occur.valueOf( occur_string.upper() ) 122 local occur = BooleanClause.Occur.valueOf( occur_string.upper() )
87 boolean_query.add( query, occur ) 123 boolean_query.add( query, occur )