comparison lucene/src/luan/modules/lucene/Web_search.luan @ 544:c5a93767cc5c

lucene overhaul, untested
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 12 Jun 2015 19:11:44 -0600
parents 4362eb720da9
children ddcd4296107a
comparison
equal deleted inserted replaced
543:9767da72545b 544:c5a93767cc5c
2 local load = Luan.load 2 local load = Luan.load
3 local pairs = Luan.pairs 3 local pairs = Luan.pairs
4 local ipairs = Luan.ipairs 4 local ipairs = Luan.ipairs
5 local range = Luan.range 5 local range = Luan.range
6 local to_string = Luan.to_string 6 local to_string = Luan.to_string
7 local Number = require "luan:Number"
8 local integer = Number.integer
9 local long = Number.long
10 local double = Number.double
11 local Io = require "luan:Io" 7 local Io = require "luan:Io"
12 local Http = require "luan:http/Http" 8 local Http = require "luan:http/Http"
13 local String = require "luan:String" 9 local String = require "luan:String"
14 local string_to_number = String.string_to_number 10 local string_to_number = String.string_to_number
15 local Html = require "luan:Html" 11 local Html = require "luan:Html"
29 <div row> 25 <div row>
30 <div colspan=2 align="right"> 26 <div colspan=2 align="right">
31 <label>Query:</label> 27 <label>Query:</label>
32 </div> 28 </div>
33 <div colspan=10> 29 <div colspan=10>
34 <input name="query" size="80" value="query.all_docs" autofocus /> 30 <input name="query" size="80" autofocus />
35 <div textcolor="#888">Query examples: <i>query.term{ type = 'user' }</i> or <i>"type:user AND name:Joe"</i></div> 31 <div textcolor="#888">Query examples: <i>type:user</i> or <i>+type:user +name:Joe"</i></div>
36 </div> 32 </div>
37 </div> 33 </div>
38 <div row margin-top="1em"> 34 <div row margin-top="1em">
39 <div colspan=2 align="right"> 35 <div colspan=2 align="right">
40 <label>Max Rows:</label> 36 <label>Max Rows:</label>
47 <div colspan=2 align="right"> 43 <div colspan=2 align="right">
48 <label>Sort:</label> 44 <label>Sort:</label>
49 </div> 45 </div>
50 <div colspan=10> 46 <div colspan=10>
51 <input name="sort" size="60" /> 47 <input name="sort" size="60" />
52 <div textcolor="#888">Sort examples: sort{{ field = 'id', type='int' }}</div> 48 <div textcolor="#888">Sort examples: <i>name, id</i></div>
53 </div> 49 </div>
54 </div> 50 </div>
55 <div row margin-top="1em"> 51 <div row margin-top="1em">
56 <div colspan=2></div> 52 <div colspan=2></div>
57 <div colspan=10> 53 <div colspan=10>
128 124
129 function M.of(index) 125 function M.of(index)
130 126
131 return function() 127 return function()
132 Io.stdout = Http.response.text_writer() 128 Io.stdout = Http.response.text_writer()
133 local query_string = Http.request.parameter.query 129 local query = Http.request.parameter.query
134 if query_string == nil then 130 if query == nil then
135 form() 131 form()
136 return 132 return
137 end 133 end
138 local query_env = {
139 query=index.query;
140 integer=integer;
141 long=long;
142 double=double;
143 }
144 local query = load(query_string,"<query>",query_env,true)()
145 local rows = string_to_number(Http.request.parameter.rows) 134 local rows = string_to_number(Http.request.parameter.rows)
146 local sort = load(Http.request.parameter.sort,"<sort>",{sort=index.query.sort},true)() 135 local sort = Http.request.parameter.sort
147 index.Searcher( function(searcher) 136 index.Searcher( function(searcher)
148 local results, length, total_hits = searcher.search(query,rows,sort) 137 local results, length, total_hits = searcher.search(query,rows,sort)
149 local headers = {} 138 local headers = {}
150 local table = {} 139 local table = {}
151 for doc in results do 140 for doc in results do