我正在使用OpenCart。
在我的网站上,我正在搜索“红色"”这个词。我收到了许多结果,例如:
但我也得到如下结果:
这是因为字母“红色”'存在于“信用”这个词的内部。如何防止这种情况,只搜索整个单词/术语?
我没想过发布整个search.php文件,因为我觉得这会有点多,针对那些可能知道他们需要我复制到这里看看的人。
答案 0 :(得分:0)
这是因为99.999999%的搜索通过所有互联网以这种方式工作。我们了解您希望仅向您的客户提供最相关的结果,但您可能会忘记网页的用户友好性。
现在,客户习惯于搜索yes
这样的字词,并期待Yes
,yesterday
,Yesus
等结果。或者即使他们不知道如何这个词继续并且只记住单词的基础,并且当更多的单词具有相同的基数时,例如Nebula
和nebulosa
(猫头鹰的种类名称 strix nebulosa ) - 它们具有相同的基础nebul
。现在,当您应用所需的搜索修改时,在使用正确的单词之前不会找到任何结果。
但是好的,这是必需的更改 - 您需要在方法catalog/model/catalog/product.php
中更改getProducts()
中的两行 - 找到此行(在第120行附近):
$implode[] = "pd.name LIKE '%" . $this->db->escape($word) . "%'";
并将其更改为
$implode[] = "pd.name = '" . $this->db->escape($word) . "'";
// ^- changed LIKE to =
// ^- we removed percentage signs -^
然后对此行执行相同操作(应为128)
$sql .= " OR pd.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
更改为
$sql .= " OR pd.description = '" . $this->db->escape($data['filter_name']) . "'";
// ^- again changed LIKE to =
// ^- again remove percentage signs here -^
在这两项更改之后,搜索应该按照需要运行(仅搜索产品标题和说明中的完整单词)。