当查询规范中有空格时,使用 Python 的 urlb2 查询 solr 请求
Querying solr requests with Python's urllb2 when there are white spaces in the query specification
我想以一种有效的方式查询 Python 中的 Solr mlt 术语。
我有一个全名列表,例如:
names = ['Bobby Johnson', 'James Bob']
要在 solr 中查询每个人的 mlt 条款,您必须使用以下 URLs:
'http://localhost:8382/solr/core/mlt?q=name:"Bobby Johnson"&fl=*,score&mlt.fl=concepts&mlt.interestingTerms=details'
'http://localhost:8382/solr/core/mlt?q=name:"James Bob"&fl=*,score&mlt.fl=concepts&mlt.interestingTerms=details'
在上面的例子中可以看到,带白色space的全名查询是用引号表示的。这是有效的,除了它是重复性工作,因为名称列表很大。
如果我尝试更有效地执行此操作,通过使用 f 字符串在 for 循环中查询列表中的每个项目,我会收到无效的 URL 错误(见下文)。
我的代码:
from urllib.request import urlopen
for name in names:
req = urlopen(f'http://localhost:8382/solr/core/mlt?q=name:"{name}",score&mlt.fl=concepts&mlt.interestingTerms=details')
request_json = json.load(req)
interesting_terms = request_json['interestingTerms']
print(interesting_terms)
#Error message:
InvalidURL: URL can't contain control characters. '/solr/core/mlt?q=name:"Bobby Johnson",score&mlt.fl=concepts&mlt.interestingTerms=details' (found at least ' ')
任何具体ideas/examples如何处理Python中的多个请求,当查询包含白色space?
期望的输出:能够为列表中的每个全名发送请求并以 json 格式返回信息。
在将 URL 发送到 urlopen 之前,您必须在生成 URL 时对值进行转义:
from urllib.request import urlopen
from urllib.parse import quote_plus
for name in names:
req = urlopen(f'http://localhost:8382/solr/core/mlt?q=name:"{quote_plus(name)}",score&mlt.fl=concepts&mlt.interestingTerms=details')
...
我想以一种有效的方式查询 Python 中的 Solr mlt 术语。 我有一个全名列表,例如:
names = ['Bobby Johnson', 'James Bob']
要在 solr 中查询每个人的 mlt 条款,您必须使用以下 URLs:
'http://localhost:8382/solr/core/mlt?q=name:"Bobby Johnson"&fl=*,score&mlt.fl=concepts&mlt.interestingTerms=details'
'http://localhost:8382/solr/core/mlt?q=name:"James Bob"&fl=*,score&mlt.fl=concepts&mlt.interestingTerms=details'
在上面的例子中可以看到,带白色space的全名查询是用引号表示的。这是有效的,除了它是重复性工作,因为名称列表很大。
如果我尝试更有效地执行此操作,通过使用 f 字符串在 for 循环中查询列表中的每个项目,我会收到无效的 URL 错误(见下文)。 我的代码:
from urllib.request import urlopen
for name in names:
req = urlopen(f'http://localhost:8382/solr/core/mlt?q=name:"{name}",score&mlt.fl=concepts&mlt.interestingTerms=details')
request_json = json.load(req)
interesting_terms = request_json['interestingTerms']
print(interesting_terms)
#Error message:
InvalidURL: URL can't contain control characters. '/solr/core/mlt?q=name:"Bobby Johnson",score&mlt.fl=concepts&mlt.interestingTerms=details' (found at least ' ')
任何具体ideas/examples如何处理Python中的多个请求,当查询包含白色space?
期望的输出:能够为列表中的每个全名发送请求并以 json 格式返回信息。
在将 URL 发送到 urlopen 之前,您必须在生成 URL 时对值进行转义:
from urllib.request import urlopen
from urllib.parse import quote_plus
for name in names:
req = urlopen(f'http://localhost:8382/solr/core/mlt?q=name:"{quote_plus(name)}",score&mlt.fl=concepts&mlt.interestingTerms=details')
...