1

我试图阻止用户使用提供太多结果的术语进行搜索。

例如,我希望用户能够搜索"Big Island"但不能搜索"Island".

我试过这个:

$array = array("island", "islands", "island's", "islet", "ilsets", "reef", "reefs", "shoal", "shoals");

if (0 < count(array_intersect(array_map('strtolower', explode(' ', $searchTerm)), $array)))
{
    echo "No results. The search term used was too general.";
    exit();
}

但这会停止搜索其中包含停用词的任何短语。

我想我正在寻找类似的东西:

如果字符串包含这个词或那个词(并且只有其中一个词!)停止你正在做的事情,否则继续......

4

5 回答 5

0

尝试查看in_array()

这样你就可以说

if (in_array($searchterm,$array))
{
  // stop searching
}
于 2013-05-15T15:03:27.893 回答
0

也许让用户搜索然后呈现一个“相关搜索”à la谷歌......

于 2013-05-15T16:08:34.830 回答
0

看看 strstr 函数它可能对你有帮助http://php.net/manual/en/function.strstr.php

于 2013-05-15T15:00:58.203 回答
0

也许在删除“停止词”(例如“the”“and”等词)后查看搜索。因此删除“停止词”,然后检查搜索字符串是否为空。还要确保将您的其他词添加到停用词列表中。

于 2013-05-15T15:02:28.843 回答
0

您为什么不尝试使用正则表达式 - 这是一个简单的演示。您当然可以从预定义的数组中生成字符组(大|小)等

$regex =  '/^(big|small)\s+(Island|islet|reef)$/';
    if ( 1 === preg_match($regex, 'big reef ') {...}
于 2013-05-15T15:37:21.823 回答