2017-02-27 199 views
1

我注意到了ravendb的python客户端的一个奇怪的解析问题。 当我使用这个查询pyravendb查询参数解析错误

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

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

回答

3

您发送Lucene的查询是这样的url:http://www.mywebsite.net/

Lucene的关键将是url和假设是http://www.mywebsite.net/ 因为你:http://www.mywebsite.net/ Lucene的分析器得到“混乱”,提高分析错误的值。 (分键,值特殊字符是:

要解决你的问题,你需要躲避:在你的URL参数,然后把它交给查询,以便您的网址参数应该是这样的: http\://www.mywebsite.net/

对于你的问题,为什么简单的空间会妨碍正常的解析是因为Lucene的空间指示有关的另一个参数来寻找。 (你可以看到我们建立什么查询时使用where_in方法你)

这个问题将在pyravendb的下一个版本(当前版本为1.3.1.1)

+0

这就是我所做的。我将用它作为一个临时的解决办法,直到下一个pyravendb推到点子:)快乐(种)有助于在乌鸦固定“错误”!谢谢 ! – Neil

+1

我修复了它,你可以更新你的pyravendb。 只是不要忘记删除逃逸 –