New Java API
------------
Key: SOLR-344
URL: https://issues.apache.org/jira/browse/SOLR-344
Project: Solr
Issue Type: Improvement
Components: clients - java, search, update
Affects Versions: 1.3
Reporter: Jonathan Woods
The core Solr codebase urgently needs to expose a new Java API designed for use
by Java running in Solr's JVM and ultimately by core Solr code itself. This
API must be (i) object-oriented ('typesafe'), (ii) self-documenting, (iii) at
the right level of granularity, (iv) designed specifically to expose the value
which Solr adds over and above Lucene.
This is an urgent issue for two reasons:
- Java-Solr integrations represent a use-case which is nearly as important as
the core Solr use-case in which non-Java clients interact with Solr over HTTP
- a significant proportion of questions on the mailing lists are clearly from
people who are attempting such integrations right now.
This point in Solr development - some way out from the 1.3 release - might be
the right time to do the development and refactoring necessary to produce this
API. We can do this without breaking any backward compatibility from the point
of view of XML/HTTP and JSON-like clients, and without altering the core Solr
algorithms which make it so efficient. If we do this work now, we can
significantly speed up the spread of Solr.
Eventually, this API should be part of core Solr code, not hived off into some
separate project nor in a non-first-class package space. It should be capable
of forming the foundation of any new Solr development which doesn't need to
delve into low level constructs like DocSet and so on - and any new development
which does need to do just that should be a candidate for incorporation into
the API at the some level. Whether or not it will ever be worth re-writing
existing code is a matter of opinion; but the Java API should be such that if
it had existed before core plug-ins were written, it would have been natural to
use it when writing them.
I've attached a PDF which makes the case for this API. Apologies for
delivering it as an attachment, but I wanted to embed pics and a bit of
formatting.
I'll update this issue in the next few days to give a prototype of this API to
suggest what it might look like at present. This will build on the work
already done in Solrj and SearchComponents
(https://issues.apache.org/jira/browse/SOLR-281), and will be a patch on an
up-to-date revision of Solr trunk.
[PS:
1. Having written most of this, I then properly looked at
SearchComponents/SOLR-281 and read
http://www.nabble.com/forum/ViewPost.jtp?post=11050274&framed=y, which says
much the same thing albeit more quickly! And weeks ago, too. But this
proposal is angled slightly differently:
- it focusses on the value of creating an API not only for internal Solr
consumption, but for local Java clients
- it focusses on designing a Java API without constantly being hobbled by
HTTP-Java
- it's suggesting that the SearchComponents work should result in a Java API
which can be used as much by third party Java as by ResponseBuilder.
2. I've made some attempt to address Hoss's point
(http://www.nabble.com/search-components-%28plugins%29-tf3898040.html#6551097579454875774)
- that an API like this would need to maintain enough state e.g. to allow an
initial search to later be faceted, highlighted etc without going back to the
start each time - but clearly the proof of the pudding will be in the prototype.
3. Again, I've just discovered SOLR-212 (DirectSolrConnection). I think all
my comments about Solrj apply to this, useful though it clearly is.]
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.