view lucene/src/luan/modules/lucene/Lucene.luan @ 617:e54c1646eed0

add Lucene.next_id()
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 30 Dec 2015 02:15:01 -0700
parents 50540f0813e2
children 5e495e4e560b
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 StringFieldParser = require "java:sane.lucene.queryparser.StringFieldParser"
local SaneQueryParser = require "java:sane.lucene.queryparser.SaneQueryParser"
local Version = require "java:org.apache.lucene.util.Version"
local EnglishAnalyzer = require "java:org.apache.lucene.analysis.en.EnglishAnalyzer"


local M = {}

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

	english = StringFieldParser.new(EnglishAnalyzer.new(Version.LUCENE_CURRENT))
}

M.literal = SaneQueryParser.literal

function M.index(index_dir,default_type,default_fields)
	local index = {}
	index.dir = index_dir
	local java_index = LuceneIndex.new(index_dir,default_type,default_fields)
	index.indexed_fields = java_index.indexedFieldsMeta.newTable()
	index.to_string = java_index.to_string
	index.backup = java_index.backup
	index.advanced_search = java_index.advanced_search
	index.search_in_transaction = java_index.search_in_transaction
	index.delete_all = java_index.delete_all
	index.delete = java_index.delete
	index.save = java_index.save
	index.update_in_transaction = java_index.update_in_transaction
	index.close = java_index.close
	index.ensure_open = java_index.ensure_open
	index.next_id = java_index.nextId

	function index.search(query, from, to, sort)
		local results = {}
		local function fn(i,doc_fn)
			if i >= from then
				results[#results+1] = doc_fn()
			end
		end
		local total_hits = index.advanced_search(query,fn,to,sort)
		return results, total_hits
	end

	function index.get_document(query)
		local doc
		local function fn(_,doc_fn)
			doc = doc_fn()
		end
		local total_hits = index.advanced_search(query,fn,1)
		total_hits <= 1 or error( "found " .. total_hits .. " documents" )
		return doc
	end

	function index.count(query)
		return index.advanced_search(query)
	end

	return index
end

return M