能否使用AND操作符通过MediaWiki API执行多词条全文搜索?
能否通过MediaWiki API(Wikidata EntitySearch)使用AND操作符进行多词条搜索?
你当前的查询写法有误,EntitySearch服务不支持直接在VALUES语句里用AND连接多个token。要实现多token的AND逻辑全文搜索,有两种可行的实现方式:
方案一:直接在搜索字符串中使用AND逻辑(推荐)
EntitySearch遵循MediaWiki的全文搜索语法,空格默认等价于AND,也可以显式写出AND。把所有token组合成一个搜索字符串传入即可,这种方式只需要调用一次API,效率更高:
SELECT DISTINCT ?item ?itemLabel WHERE { ?item (wdt:P279|wdt:P31) ?type . SERVICE wikibase:mwapi { bd:serviceParam wikibase:endpoint "www.wikidata.org"; wikibase:api "EntitySearch"; mwapi:search "token1 token2 token3"; # 空格默认是AND逻辑,也可写成"token1 AND token2 AND token3" mwapi:language "en". ?item wikibase:apiOutputItem mwapi:item. } SERVICE wikibase:label {bd:serviceParam wikibase:language "en".} }
方案二:多次调用EntitySearch叠加条件
如果需要对每个token单独配置搜索参数(比如不同语言、不同搜索模式),可以多次调用EntitySearch服务,强制同一个条目匹配所有搜索条件:
SELECT DISTINCT ?item ?itemLabel WHERE { ?item (wdt:P279|wdt:P31) ?type . # 匹配包含token1的条目 SERVICE wikibase:mwapi { bd:serviceParam wikibase:endpoint "www.wikidata.org"; wikibase:api "EntitySearch"; mwapi:search "token1"; mwapi:language "en". ?item wikibase:apiOutputItem mwapi:item. } # 同一个条目必须同时包含token2 SERVICE wikibase:mwapi { bd:serviceParam wikibase:endpoint "www.wikidata.org"; wikibase:api "EntitySearch"; mwapi:search "token2"; mwapi:language "en". ?item wikibase:apiOutputItem mwapi:item. } # 同一个条目必须同时包含token3 SERVICE wikibase:mwapi { bd:serviceParam wikibase:endpoint "www.wikidata.org"; wikibase:api "EntitySearch"; mwapi:search "token3"; mwapi:language "en". ?item wikibase:apiOutputItem mwapi:item. } SERVICE wikibase:label {bd:serviceParam wikibase:language "en".} }
另外需要注意:EntitySearch的搜索语法支持精确匹配(用双引号包裹短语)、OR逻辑(显式写OR)等,可根据需求调整搜索字符串。
内容的提问来源于stack exchange,提问作者Brice FOKO
相关产品推荐
相关产品推荐

