: indexing app I wrote into SOLR. It occurred to me that it would almost : be simpler to use the plugin-friendly QueryRequest mechanism rather than : the UpdateRequest mechanism; coupled with what you wrote below, Hoss, it : makes me think that a little refactoring of request handling might go a : long way:
I think you are definitely right ... refacting some of the SolrRequestHandler/SolrQueryRequest/SolrQueryResponse interfaces/abstract base classes to have some bases extendeable by some other SolrUpdateHandler/SolrUpdateRequest/SolrUpdateResponse interfaces/abstract base classes would go a long way. Your post also made me realize that i'd total discounted the issue of returning information about the *results* of the update back to the client ... currently it's done with XML which is "ok" because in order to send an update the client has to udnerstand XML -- but if we start supporting arbitrary formats for updates, we need to be able to respond in kind. Your comment about reusing SolrQueryResponse and QueryResponseWriters for this sounds perfect. The one hitch i think to the the notion that updates and queries map cleanlly with something like this... SolrRequestHandler => SolrUpdateHandler SolrQueryRequest => SolrUpdateRequest SolrQueryResponse => SolrUpdateResponse (possibly the same class) QueryResponseWriter => UpdateResponseWriter (possible the same class) ...is that with queries, the "input" tends to be fairly simple. very generic code can be run by the query Servlet to get all of the input params and build the SolrQueryRequest ... but with updates this isn't quite as simple. there's the two issues i spoke of in my earlier mail which should be independenly confiugable: 1) where does the "stream" of update data come from? is it in the raw POST body? is it in a POSTed multi-part MIME part? is it a remote resource refrenced by URL? 2) how should the raw binary stream of update data be parsed? is it XML? (in the current update format) is it a CSV file? is it a PDF? ...#2 can be what the SolrUpdateHandler interface is all about -- when hitting the update url you specify a "ut" (update type) that determines that logic ... but it should be independed of #1 maybe the full list of stream sources for #1 is finite and the code for all of them can live in the UpdateServlet ... but it still needs to be an option configured as a param, and it seems like it might as well be a plugin so it's easy for people to write new ones in the future. -Hoss