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

Reply via email to