Mercurial Hosting > luan
annotate lucene/src/luan/modules/lucene/Lucene.luan @ 540:4362eb720da9
add Number module
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 01 Jun 2015 18:04:50 -0600 |
parents | 919b9410008e |
children | 7170a0c414d5 |
rev | line source |
---|---|
321
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
1 java() |
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
2 local Luan = require "luan:Luan" |
320
fed1893821bf
remove global namespace
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
312
diff
changeset
|
3 local pairs = Luan.pairs |
503 | 4 local ipairs = Luan.ipairs |
323
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
321
diff
changeset
|
5 local type = Luan.type |
536
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
6 local number_type = Luan.number_type |
503 | 7 local error = Luan.error |
540 | 8 local Number = require "luan:Number" |
9 local number_type = Number.number_type | |
321
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
10 local Table = require "luan:Table" |
540 | 11 local unpack = Table.unpack |
321
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
12 local LuceneIndex = require "java:luan.modules.lucene.LuceneIndex" |
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
13 local Term = require "java:org.apache.lucene.index.Term" |
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
14 local TermQuery = require "java:org.apache.lucene.search.TermQuery" |
536
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
15 local TermRangeQuery = require "java:org.apache.lucene.search.TermRangeQuery" |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
16 local NumericRangeQuery = require "java:org.apache.lucene.search.NumericRangeQuery" |
321
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
17 local MatchAllDocsQuery = require "java:org.apache.lucene.search.MatchAllDocsQuery" |
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
18 local BooleanQuery = require "java:org.apache.lucene.search.BooleanQuery" |
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
19 local BooleanClause = require "java:org.apache.lucene.search.BooleanClause" |
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
20 local Sort = require "java:org.apache.lucene.search.Sort" |
7f7708e8fdd4
remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
320
diff
changeset
|
21 local SortField = require "java:org.apache.lucene.search.SortField" |
320
fed1893821bf
remove global namespace
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
312
diff
changeset
|
22 |
503 | 23 local M = {} |
230
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
24 |
503 | 25 function M.index(indexDir) |
303
fdb4bd391c28
add lucene close();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
300
diff
changeset
|
26 local index = {} |
fdb4bd391c28
add lucene close();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
300
diff
changeset
|
27 local java_index = LuceneIndex.new(indexDir) |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
28 index.fields = java_index.fields.newTable() |
303
fdb4bd391c28
add lucene close();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
300
diff
changeset
|
29 index.to_string = java_index.to_string |
fdb4bd391c28
add lucene close();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
300
diff
changeset
|
30 index.backup = java_index.backup |
fdb4bd391c28
add lucene close();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
300
diff
changeset
|
31 index.Writer = java_index.Writer |
fdb4bd391c28
add lucene close();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
300
diff
changeset
|
32 index.Searcher = java_index.Searcher |
fdb4bd391c28
add lucene close();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
300
diff
changeset
|
33 index.delete_all = java_index.delete_all |
fdb4bd391c28
add lucene close();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
300
diff
changeset
|
34 index.map_field_name = java_index.map_field_name |
fdb4bd391c28
add lucene close();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
300
diff
changeset
|
35 index.close = java_index.close |
230
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
36 |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
37 function index.save_document(doc) |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
38 index.Writer( function(writer) |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
39 writer.save_document(doc) |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
40 end ) |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
41 end |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
42 |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
43 function index.delete_documents(terms) |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
44 index.Writer( function(writer) |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
45 writer.delete_documents(terms) |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
46 end ) |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
47 end |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
48 |
257
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
49 function index.get_first(query, sort) |
233
ef39bc4d3f70
basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
232
diff
changeset
|
50 return index.Searcher( function(searcher) |
257
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
51 local results, _, total_hits = searcher.search(query,1,sort) |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
52 return results(), total_hits |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
53 end ) |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
54 end |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
55 |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
56 function index.get_document(query) |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
57 local doc, total_hits = index.get_first(query); |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
58 if total_hits > 1 then |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
59 error( "found " .. total_hits .. " documents" ) |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
60 end |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
61 return doc |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
62 end |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
63 |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
64 function index.count(query) |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
65 return index.Searcher( function(searcher) |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
66 local _, _, total_hits = searcher.search(query,0) |
c5c60eca33dd
allow Lucene search for 0 rows
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
67 return total_hits |
232
9ce18106f95a
more lucene work
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
230
diff
changeset
|
68 end ) |
9ce18106f95a
more lucene work
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
230
diff
changeset
|
69 end |
9ce18106f95a
more lucene work
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
230
diff
changeset
|
70 |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
71 |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
72 |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
73 local queryTbl = {} |
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
74 index.query = queryTbl |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
75 |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
76 queryTbl.parse = java_index.parse |
312
d34be4588556
add lucene query parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
303
diff
changeset
|
77 |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
78 queryTbl.all_docs = MatchAllDocsQuery.new() |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
79 |
538
919b9410008e
let lucene.query.term take field and value as arguments
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
80 function queryTbl.term(field,value) |
919b9410008e
let lucene.query.term take field and value as arguments
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
81 if value==nil and type(field)=="table" then |
919b9410008e
let lucene.query.term take field and value as arguments
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
82 local iter = pairs(field) |
919b9410008e
let lucene.query.term take field and value as arguments
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
83 field, value = iter() |
919b9410008e
let lucene.query.term take field and value as arguments
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
84 iter()==nil or error "only one term allowed" |
919b9410008e
let lucene.query.term take field and value as arguments
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
85 end |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
86 field and value or error "missing term" |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
87 field = index.map_field_name(field) |
536
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
88 local tp = type(value) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
89 if tp == "string" then |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
90 return TermQuery.new(Term.new(field,value)) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
91 end |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
92 if tp == "number" then |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
93 return queryTbl.range(field,value,value) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
94 end |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
95 error("invalid term value type: "..tp) |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
96 end |
536
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
97 |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
98 function queryTbl.range(field,min,max,include_min,include_max) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
99 if include_min == nil then include_min = true end |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
100 if include_max == nil then include_max = true end |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
101 field = index.map_field_name(field) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
102 local tp = type(min) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
103 tp == type(max) or error "min and max types don't match" |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
104 if tp == "string" then |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
105 return TermRangeQuery.newStringRange(field,min,max,include_min,include_max) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
106 end |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
107 if tp == "number" then |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
108 tp = number_type(min) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
109 tp == number_type(max) or error "min and max number types don't match" |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
110 if tp == "integer" then |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
111 return NumericRangeQuery.newIntRange(field,min,max,include_min,include_max) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
112 end |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
113 if tp == "long" then |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
114 return NumericRangeQuery.newLongRange(field,min,max,include_min,include_max) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
115 end |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
116 if tp == "double" then |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
117 return NumericRangeQuery.newDoubleRange(field,min,max,include_min,include_max) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
118 end |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
119 error("invalid term value type: "..tp) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
120 end |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
121 error("invalid term value type: "..tp) |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
122 end |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
123 |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
124 function queryTbl.boolean(t) |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
125 local boolean_query = BooleanQuery.new() |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
126 for query, occur_string in pairs(t) do |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
127 local occur = BooleanClause.Occur.valueOf( occur_string.upper() ) |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
128 boolean_query.add( query, occur ) |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
129 end |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
130 return boolean_query |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
131 end |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
132 |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
133 -- and list |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
134 function queryTbl.all(t) |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
135 local bt = {} |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
136 for key, query in pairs(t) do |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
137 if type(key)=="string" then |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
138 query = queryTbl.term{[key]=query} |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
139 end |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
140 bt[query] = "MUST" |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
141 end |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
142 return queryTbl.boolean(bt) |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
143 end |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
144 |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
145 -- or list |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
146 function queryTbl.any(t) |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
147 local bt = {} |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
148 for key, query in pairs(t) do |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
149 if type(key)=="string" then |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
150 query = queryTbl.term{[key]=query} |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
151 end |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
152 bt[query] = "SHOULD" |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
153 end |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
154 return queryTbl.boolean(bt) |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
155 end |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
156 |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
157 |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
158 function queryTbl.sort(fields) |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
159 #fields > 0 or error "list of sort fields expected" |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
160 local a = {} |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
161 for _, f in ipairs(fields) do |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
162 f.field or error "missing sort field" |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
163 f.type or error "missing sort type" |
515
1b2e4c7dab85
fix lucene sort and improve Web_search
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
164 local field = index.map_field_name(f.field) |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
165 local type = SortField.Type.valueOf( f.type.upper() ) |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
166 local reverse = f.reverse or false |
515
1b2e4c7dab85
fix lucene sort and improve Web_search
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
167 a[#a+1] = SortField.new(field,type,reverse) |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
168 end |
540 | 169 return Sort.new(unpack(a)) |
287
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
170 end |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
171 |
4d53e9fc1bd9
change lucene search to take lucene objects
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
272
diff
changeset
|
172 |
230
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
173 return index |
4438cb2e04d0
start lucene
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
174 end |
503 | 175 |
176 return M |