Thanks for your time and help Andrea,
I guess we should try to use the Json API
<https://lucene.apache.org/solr/guide/7_4/json-request-api.html> provided
by Solr and figure out a way to do so with SolrJ.


On Wed, 29 Aug 2018 at 14:21, Andrea Gazzarini <a.gazzar...@sease.io> wrote:

> Well, I don't know the actual reason why the behavior is different
> between Cloud and Embedded client: maybe things are different because in
> the Embedded Solr HTTP is not involved at all, but I'm just shooting in
> the dark.
>
> I'm not aware about POST capabilities you mentioned, sorry
>
> Andrea
>
>
> On 29/08/2018 14:07, Alfonso Noriega wrote:
> > 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