我注意到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
。
任何想法为什么一个简单的空间可以阻止正确的解析?
答案 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)