lucene-solr-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrea Gazzarini <a.gazzar...@sease.io>
Subject Re: Solr7 embeded req: Bad content type error
Date Fri, 31 Aug 2018 15:46:52 GMT
Hi Alfonso, thank you, too: I've learned another stuff ;)

Andrea

On 29/08/18 14:31, Alfonso Noriega wrote:
> 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.gazzarini@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.gazzarini@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.gazzarini@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!
>>


Mime
View raw message