view lucene/src/luan/modules/lucene/Lucene.luan @ 544:c5a93767cc5c

lucene overhaul, untested
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 12 Jun 2015 19:11:44 -0600
parents 7170a0c414d5
children ddcd4296107a
line wrap: on
line source

java()
local Luan = require "luan:Luan"
local error = Luan.error
local LuceneIndex = require "java:luan.modules.lucene.LuceneIndex"
local NumberFieldParser = require "java:sane.lucene.queryparser.NumberFieldParser"


local M = {}

M.type = {
	string = LuceneIndex.STRING_FIELD_PARSER;
	integer = NumberFieldParser.INT;
	long = NumberFieldParser.LONG;
	double = NumberFieldParser.DOUBLE;
}

function M.index(indexDir)
	local index = {}
	local java_index = LuceneIndex.new(indexDir)
	index.indexed_fields = java_index.indexedFieldsMeta.newTable()
	index.to_string = java_index.to_string
	index.backup = java_index.backup
	index.Writer = java_index.Writer
	index.Searcher = java_index.Searcher
	index.delete_all = java_index.delete_all
	index.close = java_index.close

	function index.save_document(doc)
		index.Writer( function(writer)
			writer.save_document(doc)
		end )
	end

	function index.delete_documents(terms)
		index.Writer( function(writer)
			writer.delete_documents(terms)
		end )
	end

	function index.get_first(query, sort)
		return index.Searcher( function(searcher)
			local results, _, total_hits = searcher.search(query,1,sort)
			return results(), total_hits
		end )
	end

	function index.get_document(query)
		local doc, total_hits = index.get_first(query);
		if total_hits > 1 then
			error( "found " .. total_hits .. " documents" )
		end
		return doc
	end

	function index.count(query)
		return index.Searcher( function(searcher)
			local _, _, total_hits = searcher.search(query,0)
			return total_hits
		end )
	end

	return index
end

return M