Yes, I realized that changing the method to GET solves the issue but it is intentionally set to POST as in a real case scenario we had the issue of users creating too long queries which where facing the REST length limits. I think a possible solution would be to send the Solr params as a json in the request body, but I am not sure if SolrJ supports this.
Alfonso. On Wed, 29 Aug 2018 at 13:46, Andrea Gazzarini <a.gazzar...@sease.io> wrote: > I think that's the issue: just guessing because I do not have the code > in front of me. > > POST requests put the query in the request body, and the > EmbeddedSolrServer expects to find a valid JSON. Did you try to remove > the Method param? > > Andrea > > > On 29/08/2018 13:12, Alfonso Noriega wrote: > > Hi Andrea, > > > > Thanks for your help, something which is relevant and I forgot to mention > > before is that the requests are always a POST method. > > As mentioned before, it is not a single query which fails but all of the > > requests done to the search handler. > > > > final SolrQuery q = new SolrQuery("!( _id_:"+ doc.getId()+")AND(_root_:"+ > > doc.getId()+")"); > > final QueryResponse query = solrClient.query(q, SolrRequest.METHOD.POST); > > > > Regarding the embedded server instantiation: > > . > > . > > . > > final CoreContainer container = CoreContainer.createAndLoad(tmpSolrHome, > > tmpSolrConfig); > > return new SolrClientWrapper(container, CORE_NAME, tmpSolrHome); > > . > > . > > . > > private class SolrClientWrapper extends EmbeddedSolrServer { > > > > private final Path temporaryFolder; > > > > public SolrClientWrapper(CoreContainer coreContainer, String > > coreName, Path temporaryFolder) { > > super(coreContainer, coreName); > > this.temporaryFolder = temporaryFolder; > > } > > . > > . > > . > > > > The whole embedded server instantiation can be seen here > > < > https://github.com/RBMHTechnology/vind/blob/master/server/embedded-solr-server/src/main/java/com/rbmhtechnology/vind/solr/backend/EmbeddedSolrServerProvider.java > > > > . > > > > Best, > > Alfonso. > > > > On Wed, 29 Aug 2018 at 12:57, Andrea Gazzarini <a.gazzar...@sease.io> > wrote: > > > >> Hi Alfonso, > >> could you please paste an extract of the client code? Specifically those > >> few lines where you create the SolrQuery with params. > >> > >> The line you mentioned is dealing with ContentStream which as far as I > >> remember wraps the request body, and not the request params. So as > >> request body Solr expects a valid JSON payload, but in your case, if I > >> got you, you're sending plain query parameters (through SolrJ). > >> > >> Best, > >> Andrea > >> > >> On 29/08/2018 12:45, Alfonso Noriega wrote: > >>> Hi, > >>> I am implementing a migration of Vind > >>> <https://github.com/RBMHTechnology/vind> library from solr 5 to 7.4.0 > >> and I > >>> am facing an error which I have no idea how to solve... > >>> > >>> The library provides a wrapper (and some extra stuff) to develop search > >>> tools over Solr and uses SolrJ to access it, more info about it can be > >> seen > >>> in the public repo, but basically all requests are done to solr > through a > >>> client provided by solrj. > >>> Actually, the migration is done and the tests running against a cloud > >>> instance are working perfectly fine. The issue arises when testing > >> against > >>> an embedded server (which is the default case as you may not have a > local > >>> solr instance running), in which case every request fails throwing the > >>> following exception: > >>> *org.apache.solr.common.SolrException: Bad contentType for search > handler > >>> :application/javabin request={q=!(+_id_:P3)AND(_root_:P3)}* > >>> > >>> * at > >>> > >> > org.apache.solr.request.json.RequestUtil.processParams(RequestUtil.java:73)* > >>> * at > >>> > >> > org.apache.solr.util.SolrPluginUtils.setDefaults(SolrPluginUtils.java:167)* > >>> * at > >>> > >> > org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:196)* > >>> * at org.apache.solr.core.SolrCore.execute(SolrCore.java:2539)* > >>> * at > >>> > >> > org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:191)* > >>> * at > >> org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:194)* > >>> * at > org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:974)* > >>> * at > org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:990)* > >>> > >>> After some debugging I have seen that the embedded solr server uses > >>> *org.apache.solr.request.json.RequestUtil* to process the parameters > >> which > >>> invariable expects a '*application/json' *contentType but SolrJ > prodcues > >> as > >>> *'application/javabin'.* > >>> Any ideas on how to fix this issue? > >>> > >>> The library has in the pom defined the following solr depedencies : > >>> *.* > >>> *.* > >>> *.* > >>> > >>> *<solr.version>7.4.0</solr.version>* > >>> *.* > >>> *.* > >>> *.* > >>> *<dependency>* > >>> * <groupId>org.apache.solr</groupId>* > >>> * <artifactId>solr-core</artifactId>* > >>> * <version>${solr.version}</version>* > >>> *</dependency>* > >>> *<dependency>* > >>> * <groupId>org.apache.solr</groupId>* > >>> * <artifactId>solr-solrj</artifactId>* > >>> * <version>${solr.version}</version>* > >>> *</dependency>* > >>> > >>> Thanks! > >> > > -- -- Alfonso Noriega Software engineer Redlink GmbH e: alfonso.nori...@redlink.co <sergio.fernan...@redlink.co> w: http://redlink.co