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