Mercurial Hosting > luan
view lucene/src/luan/modules/lucene/Web_search.luan @ 550:b2139b21b49c 0.10
use Io.repr() in lucene/Web_search
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 17 Jun 2015 19:50:32 -0600 |
parents | c69b4833a3a3 |
children | 363d07e26549 |
line wrap: on
line source
local Luan = require "luan:Luan" local error = Luan.error local pairs = Luan.pairs or error() local ipairs = Luan.ipairs or error() local range = Luan.range or error() local to_string = Luan.to_string or error() local Io = require "luan:Io" local repr = Io.repr or error() local Http = require "luan:http/Http" local String = require "luan:String" local string_to_number = String.to_number or error() local Html = require "luan:Html" local M = {} local function form() %> <html> <head> <% Html.simply_html_head() %> <title>Lucene Query</title> </head> <body> <div container> <h3 margin-top="1.5em">Lucene Query</h3> <form horizontal name="form0" method="post" margin-top="2em"> <div row> <div colspan=2 align="right"> <label>Query:</label> </div> <div colspan=10> <input name="query" size="80" autofocus /> <div textcolor="#888">Query examples: <i>type:user</i> or <i>+type:user +name:Joe"</i></div> </div> </div> <div row margin-top="1em"> <div colspan=2 align="right"> <label>Max Rows:</label> </div> <div colspan=10> <input name="rows" value="100" size="3" maxlength="5" /></p> </div> </div> <div row margin-top="1em"> <div colspan=2 align="right"> <label>Sort:</label> </div> <div colspan=10> <input name="sort" size="60" /> <div textcolor="#888">Sort examples: <i>name, id</i></div> </div> </div> <div row margin-top="1em"> <div colspan=2></div> <div colspan=10> <input type="submit" textcolor="white" bgcolor="#337ab7" large/> </div> </div> </form> </div> <% Html.simply_html_body_bottom() %> </body> </html> <% end local function result(query,sort,headers,table) %> <html> <head> <% Html.simply_html_head() %> <title>Lucene Query</title> </head> <body> <div container> <h3 margin-top="1.5em">Lucene Query Results</h3> <div row> <div colspan=2 align="right"> <label>Query:</label> </div> <div colspan=10> <b><%=Html.encode(to_string(query))%></b></p> </div> </div> <div row> <div colspan=2 align="right"> <label>Sort:</label> </div> <div colspan=10> <b><%=Html.encode(to_string(sort))%></b></p> </div> </div> <table border condensed margin-top="1.5em"> <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 local val = row[col] %><td><%= val and repr(val) or "" %></td><% end %> </tr> <% end %> </table> </div> <% Html.simply_html_body_bottom() %> </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 M.of(index) index or error "index is nil" return function() Io.stdout = Http.response.text_writer() local query = Http.request.parameter.query if query == nil then form() return end local rows = string_to_number(Http.request.parameter.rows) local sort = Http.request.parameter.sort local results = index.search(query,1,rows,sort) local headers = {} local table = {} for _, doc in ipairs(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 return M