我正在使用url API执行字符串搜索。我的字符串包含" |",但API将其解释为魔术字符而不是我的搜索字符串的一部分。例如:我想找到逐字文本 MyPrefix | CommonGround ,但这两个字符串不会被搜索为连接块。
https://gunretort.xyz/api.php?action=query&list=search&srsearch=MyPrefix|CommonGround&srwhat=text
(请注意,此问题中的网址可能无法在您的浏览器中加载。它们仅用于显示我的网址语法)
我试过替换|使用" {{!}}",但结果是相同的。
https://gunretort.xyz/api.php?action=query&list=search&srsearch=MyPrefix{{!}}CommonGround&srwhat=text
Doc表示要用作值分隔符,如果我需要使用bar作为字符串。
https://gunretort.xyz/api.php?action=query&list=search&srsearch=<US>MyPrefix|Terrorism&srwhat=text&srnamespace=<US>0<US>3000&format=xml
但得到:
参数&#34; srnamespace&#34;:03000
的无法识别的值
还尝试替换html解码的版本
,
https://gunretort.xyz/api.php?action=query&list=search&srsearch=MyPrefix|Terrorism&srwhat=text&srnamespace=03000&format=xml
但未被承认:
{ &#34;错误&#34;:{ &#34;代码&#34;:&#34; nosearch&#34;, &#34; info&#34;:&#34; \&#34;搜索\&#34;参数必须设置。&#34; }}
尝试使用百分比编码进行转义(例如,使用%1F代替)。它没有用:
警告:跳过错误选项&#39; MyPrefix%1FCommonGround&#39;用于参数 &#39;使用&#39;
尝试用分隔符作为前缀。给出API错误。
https://gunretort.xyz/api.php?action=query&list=search&srsearch=%1FNewTag%1FSpinach&srwhat=text&srnamespace=0|3000&format=xml
返回
Doc说srsearch不是一个多值参数 - 它只能传递一个传递给搜索引擎的值。但是,我发现搜索引擎会对待&#34; |&#34;作为AND的角色。也许某些层错误解释了参数。
请参阅https://phabricator.wikimedia.org/T194016
似乎嵌入式管道未被视为字符串的一部分。 见https://phabricator.wikimedia.org/T194039
也许如果我们可以确定哪个层对管道做出反应,我们就可以找到逃脱它的方法。但是,从理论上讲,如果srsearch不支持多值,那么我认为如果嵌入式管道破坏了srsearch,这就是一个错误。
我尝试将管道转移为%7C
https://gunretort.xyz/api.php?action=query&list=search&srsearch=NewTag%7CAnteater&srwhat=text&srnamespace=0|3000
匹配的网页包含:
NewTag x Anteater
和
Anteater banana NewTag
但应仅匹配包含
的页面NewTag |食蚁兽
我试图用引号(实际或url编码)包围整个字符串。
https://gunretort.xyz/api.php?action=query&list=search&srsearch=%22NewTag%7CAnteater%22&srwhat=text&srnamespace=0|3000|3004
https://gunretort.xyz/api.php?action=query&list=search&srsearch="NewTag|Anteater"&srwhat=text&srnamespace=0|3000|3004
同时找到:
NewTag |食蚁兽
和
NewTag Anteater
我们不想找到第二个(管道被解释为空间)。
可能的解决方案: 连接字符? 扩展:elasticSearch