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.