Skip to content
Advertisement

pyravendb query parameters parsing error

I’ve noticed a weird parsing problem with ravendb‘s python client. when i use this query

query_result = list(session.query().where_equals("url",url).select("Id","htmlCode","url"))

knowing that url = "http://www.mywebsite.net/"

The relevent part of the error stack is the following :

  File "/usr/local/lib/python3.5/dist-packages/pyravendb/store/session_query.py", line 71, in __iter__
    return self._execute_query().__iter__()
  File "/usr/local/lib/python3.5/dist-packages/pyravendb/store/session_query.py", line 307, in _execute_query
    includes=self.includes)
  File "/usr/local/lib/python3.5/dist-packages/pyravendb/d_commands/database_commands.py", line 286, in query
    raise exceptions.ErrorResponseException(response["Error"][:100])
pyravendb.custom_exceptions.exceptions.ErrorResponseException: Lucene.Net.QueryParsers.ParseException: Could not parse: 'url:http://www.mywebsite.net/' ---> 

BUT if I simply add a simple ' ' to the url parameter in the query, it works without any parsing error (but dosent returns a result though since syntax isnt the same).

I would like to contribute to the pyravendb on github but I’m not sure where it’s parsing the parameters, it’s probably calling lucene for that.

Any idea why a simple space can prevent proper parsing ?

Advertisement

Answer

The query you send to lucene is this url:http://www.mywebsite.net/

lucene key will be the url and the value suppose to be http://www.mywebsite.net/ because you have : in http://www.mywebsite.net/ the lucene parser get “confused” and raise a parsing error.(split key,value special character is :)

To fix your problem you need to escape the : in your url parameter and then give it to the query so your url parameter should look like this: http://www.mywebsite.net/

For your question why simple space can prevent proper parsing is because space in lucene indicates about another parameter to look for. (you can see what query we build when you using the where_in method)

This issue will be fixed in the next version of pyravendb (current version is 1.3.1.1)

Advertisement