Mercurial Hosting > luan
view lucene/src/luan/modules/lucene/Web_search.luan @ 285:582e8db4cdb6
add lucene Web_search
git-svn-id: https://luan-java.googlecode.com/svn/trunk@286 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Tue, 02 Dec 2014 06:17:45 +0000 |
parents | |
children | 91be4027b2a8 |
line wrap: on
line source
import "luan:Io" import "luan:web/Http" import "luan:String" local function form() %> <html> <body> <form method="post"> <p>Query: <input name="query" size="60" /></p> <p>Rows: <input name="rows" value="20" /></p> <p>Sort: <input name="sort" size="60" /></p> <p><input type="submit" /></p> </form> </body> </html> <% end local function result(query,sort,headers,table) %> <html> <body> <p>Query: <b><%=repr(query)%></b></p> <p>Sort: <b><%=repr(sort)%></b></p> <table border="1"> <tr><th></th> <% for _, header in ipairs(headers) do %><th><%=header%></th><% end %> </tr> <% for i, row in ipairs(table) do %> <tr><td><%=i%></td> <% for col in range(1,#headers) do %><td><%= row[col] or "" %></td><% end %></tr><% end %> </body> </html> <% end local function index_of(tbl,val) for i, v in ipairs(tbl) do if v == val then return i end end local n = #tbl + 1 tbl[n] = val return n end function of(index) return { service = function() Io.stdout = Http.response.text_writer() local query_string = Http.request.parameters.query if query_string == nil then form() return end local query = load(query_string,"<query>",{},true)() local rows = to_number(Http.request.parameters.rows) local sort = load(Http.request.parameters.sort,"<sort>",{},true)() index.Searcher( function(searcher) local results, length, total_hits = searcher.search(query,rows,sort) local headers = {} local table = {} for doc in results do local row = {} for field, value in pairs(doc) do row[index_of(headers,field)] = value end table[#table+1] = row end result(query,sort,headers,table) end ) end } end