【问题标题】:pyravendb query parameters parsing errorpyravendb查询参数解析错误
【发布时间】:2017-02-27 13:11:57
【问题描述】:

我注意到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

知道为什么简单的空格会妨碍正确解析吗?

【问题讨论】:

    标签: python linux lucene ravendb


    【解决方案1】:

    您发送给 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)

    【讨论】:

    • 我就是这么做的。在下一个 pyravendb 被推送到 pip 之前,我将使用它作为临时修复 :) 很高兴(有点)为修复 Raven 中的“错误”做出贡献!谢谢!
    • 我修复了它,你可以更新你的 pyravendb。只是不要忘记删除转义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多