从 wikidata 网站获取搜索结果,但不是 API

Getting search results from wikidata website, but not API

我正在试用维基数据 API,但在搜索查询 "Jas 39 C Gripen" 时遇到了一些问题。它 returns 在 wikidata 网站上的结果,但如果我使用 API.

在维基数据网站上,我得到了查询的两个搜索结果

https://www.wikidata.org/w/index.php?search=Jas+39+C+Gripen&title=Special:Search&fulltext=1

使用 API 的相同查询,没有 return 结果

https://www.wikidata.org/w/api.php?action=wbsearchentities&format=json&language=en&type=item&continue=0&search=Jas%2039%20C%20Gripen

我是否遗漏了某些参数或使用了错误的参数?对于许多其他查询,我从 API.

获得结果

原因好像是英文标签是JAS 39C Gripen。通过从查询中删除一个 space,您将获得所需的结果:

https://www.wikidata.org/w/api.php?action=wbsearchentities&format=json&language=en&type=item&continue=0&search=Jas%2039C%20Gripen

似乎本地维基数据搜索在解​​释用户条目时应用了一些 "fuzzy logic"。在您的例子中,它显示了两个结果,尽管第一个中缺少字符 C

回到 API 和您选择的操作 ,您可以使用 Jas 39 Gripen 作为搜索词(将显示一个结果)作为以及 Jas 39C Gripen(也将显示一个结果)。但似乎不能使用 Jas 39 C Gripen(注意 9C 之间的 space 字符)。

换句话说,

https://www.wikidata.org/w/api.php?action=wbsearchentities&format=json&language=en&type=item&continue=0&search=Jas%2039%20Gripen
https://www.wikidata.org/w/api.php?action=wbsearchentities&format=json&language=en&type=item&continue=0&search=Jas%2039C%20Gripen

两者都有效,但是

https://www.wikidata.org/w/api.php?action=wbsearchentities&format=json&language=en&type=item&continue=0&search=Jas%2039%20C%20Gripen

不会。

我进一步调查了这个问题,最终找到了解决方案。试试这个:

https://www.wikidata.org/w/api.php?action=query&list=search&format=json&srsearch=Jas+39+C+Gripen

操作 query 允许在搜索词中包含一些 "fuzziness"。请参阅 API 文档以获取更多详细信息。简而言之,此操作执行全文搜索(您显然想要)并允许 nearmatch 搜索类型。