comparison lucene/src/luan/modules/lucene/Lucene.luan @ 542:7170a0c414d5

better numeric term query
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 01 Jun 2015 21:48:57 -0600
parents 4362eb720da9
children c5a93767cc5c
comparison
equal deleted inserted replaced
541:fda38db30e65 542:7170a0c414d5
15 local TermRangeQuery = require "java:org.apache.lucene.search.TermRangeQuery" 15 local TermRangeQuery = require "java:org.apache.lucene.search.TermRangeQuery"
16 local NumericRangeQuery = require "java:org.apache.lucene.search.NumericRangeQuery" 16 local NumericRangeQuery = require "java:org.apache.lucene.search.NumericRangeQuery"
17 local MatchAllDocsQuery = require "java:org.apache.lucene.search.MatchAllDocsQuery" 17 local MatchAllDocsQuery = require "java:org.apache.lucene.search.MatchAllDocsQuery"
18 local BooleanQuery = require "java:org.apache.lucene.search.BooleanQuery" 18 local BooleanQuery = require "java:org.apache.lucene.search.BooleanQuery"
19 local BooleanClause = require "java:org.apache.lucene.search.BooleanClause" 19 local BooleanClause = require "java:org.apache.lucene.search.BooleanClause"
20 local BytesRef = require "java:org.apache.lucene.util.BytesRef"
21 local NumericUtils = require "java:org.apache.lucene.util.NumericUtils"
20 local Sort = require "java:org.apache.lucene.search.Sort" 22 local Sort = require "java:org.apache.lucene.search.Sort"
21 local SortField = require "java:org.apache.lucene.search.SortField" 23 local SortField = require "java:org.apache.lucene.search.SortField"
22 24
23 local M = {} 25 local M = {}
24 26
88 local tp = type(value) 90 local tp = type(value)
89 if tp == "string" then 91 if tp == "string" then
90 return TermQuery.new(Term.new(field,value)) 92 return TermQuery.new(Term.new(field,value))
91 end 93 end
92 if tp == "number" then 94 if tp == "number" then
93 return queryTbl.range(field,value,value) 95 local br = BytesRef.new()
96 tp = number_type(value)
97 if tp == "integer" then
98 NumericUtils.intToPrefixCoded(value,0,br)
99 elseif tp == "long" then
100 NumericUtils.longToPrefixCoded(value,0,br)
101 elseif tp == "double" then
102 value = NumericUtils.doubleToSortableLong(value)
103 NumericUtils.longToPrefixCoded(value,0,br)
104 else
105 error("invalid term value type: "..tp)
106 end
107 return TermQuery.new(Term.new(field,br))
94 end 108 end
95 error("invalid term value type: "..tp) 109 error("invalid term value type: "..tp)
96 end 110 end
97 111
98 function queryTbl.range(field,min,max,include_min,include_max) 112 function queryTbl.range(field,min,max,include_min,include_max)