pyravendb查询参数解析错误

时间:2017-02-27 13:11:57

标签: python linux lucene ravendb

我注意到ravendb的python客户端有一个奇怪的解析问题。 当我使用这个查询时

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

知道url = "http://www.mywebsite.net/"

错误堆栈的相关部分如下:

  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/' ---> 

但是,如果我只是在查询中的url参数中添加一个简单的' ',它就可以在没有任何解析错误的情况下工作(但是由于语法不同,dosent会返回结果)。

我想在github上为pyravendb做贡献,但我不确定它在哪里解析参数,它可能会为此调用lucene

任何想法为什么一个简单的空间可以阻止正确的解析?

1 个答案:

答案 0 :(得分:3)

您发送给lucene的查询是url:http://www.mywebsite.net/

lucene键将是url,值假设为http://www.mywebsite.net/ 因为你在:中有http://www.mywebsite.net/ lucene解析器得到了混淆"并引发解析错误。(拆分键,值特殊字符为:

要解决您的问题,您需要转义url参数中的:,然后将其提供给查询,以便您的url参数应如下所示: http\://www.mywebsite.net/

对于您的问题,为什么简单的空间可以阻止正确的解析是因为lucene中的空间指示要查找的另一个参数。 (您可以看到我们使用where_in方法时构建的查询)

此问题将在下一版本的pyravendb中修复(当前版本为1.3.1.1)