atom feed8 messages in org.apache.lenya.userAPI for document search
FromSent OnAttachments
Andreas HartmannApr 2, 2008 2:05 am 
Andreas HartmannApr 4, 2008 7:46 am 
kanth nalluriApr 5, 2008 4:25 am 
Andreas HartmannApr 6, 2008 2:20 pm 
Andreas HartmannMay 13, 2008 8:28 am 
Thorsten ScherlerJul 16, 2009 2:52 am 
Andreas HartmannJul 16, 2009 3:18 am 
Thorsten ScherlerJul 16, 2009 3:33 am 
Subject:API for document search
From:Andreas Hartmann (andr@apache.org)
Date:Apr 2, 2008 2:05:37 am
List:org.apache.lenya.user

Hi Lenya users,

I'd like to hear about your opinions regarding the search capabilities Lenya should provide.

I have the requirement that it should be possible to issue a search for documents from every Java service. For this purpose, I'd like to introduce a service interface, e.g. DocumentSearcher, with a method that returns a list of hits. But I'm not sure about the method signature yet. IMO it has to be something like

Hits find(Index index, Query query)

Should we abstract away Lucene, or should we just use the Lucene classes Hits and Query? If we introduce our own hits interface, e.g. DocumentHits, it would be easier to obtain the document from a hit:

o.a.l.cms.publication.Document doc = hit.getDocument();

Otherwise, a helper would be needed:

o.a.l.cms.publication.Document doc = searcher.getDocument(hit);

IMO the first version is preferrable.

The same question applies to the Query. That mainly depends on how we want to build queries. If we use the Lucene Query interface, we could

a) use subclasses, e.g. MetaDataQuery (IMO preferrable) b) use helpers, e.g. SearchUtil.buildMetaDataQuery(…)

If we introduce our own Query syntax, things might become more complicated. Another option would be to use just query strings, but this requires us to define a syntax. Or we could just use the Lucene query parser syntax. The signature would then be

Hits find(Index index, String queryString)

BTW, JCR uses the following API:

QueryManager queryManager = workspace.getQueryManager();

Query xPathQuery = queryManager.createQuery("//*", Query.XPATH); Query sqlQuery = queryManager.createQuery("select * …", Query.SQL);

QueryResult result = xPathQuery.execute();

WDYT?

-- Andreas