我使用的是Art Institute of芝加哥API(https://api.artic.edu/docs/#introduction),其中有一个名为subject_titles的元素,它是一个字符串数组。我想查询API,以显示所有在subject_titles中包含字符串“landscapes”的结果,而不是在我这端抓取API并搜索字符串。
以下是我尝试过的一些失败的例子:
第一个月https://api.artic.edu/api/v1/artworks/search?query[terms][subject_titles]=landscape
个
我估计它会用一个不同的指定符来替换“[terms]”,但我找不到具体的指定符。我所有的研究都得出了使用Elasticsearch API的结果,但我对这个很陌生,这似乎是一个我不想打开的蠕虫罐头(为什么我需要一个API来查询另一个API?另外,DSL看起来像是学习synatx-wise的一个头痛问题,但如果我必须学习它,我会学习它。
1条答案
按热度按时间goqiplq21#
TL;DR:
https://api.artic.edu/api/v1/artworks/search?query[match][subject_titles]=landscape
如果你想要一个更详细的解释,我认为他们试图使界面强大和简洁,所以你可以做结构化查询只与一个网址,但我同意,这是有点混乱。
看起来URL参数被转换成DSL中的顶级元素,如果值以
foo[bar]
开头,它们被转换成foo,里面嵌套了bar。字符串
记住这些信息,我们可以将
query[term][is_public_domain]=true
逆向工程为型
如果我们现在打开elasticsearch documentation,我们可以发现
term
是查询的类型,这个查询将搜索所有字段is_public_domain
包含true
的文档。我们需要搜索另一个字段和另一个值。所以,如果我们将is_public_domain
替换为subject_titles
,将true
替换为landscape
,Term对于布尔型字段(如is_public_domain
)效果很好,但最好用另一种查询类型搜索字符串-match
。所以我们也应该用match
替换term
。最后我们会得到以下查询:型
现在我们可以将其转换回URL表示:
query[match][subject_titles]=landscape
,如果我们将其粘贴回URL,https://api.artic.edu/api/v1/artworks/search?query[match][subject_titles]=landscape
这将给予我们前10次点击。如果我们想要更多,我们可以添加限制:
https://api.artic.edu/api/v1/artworks/search?query[match][subject_titles]=landscape&limit=100
如果我们想要更多的结果,我们可以使用page参数开始分页
https://api.artic.edu/api/v1/artworks/search?query[match][subject_titles]=landscape&limit=100&page=2