OpenCart也在产品标题中搜索


OpenCart searching inside of product titles too

我正在使用OpenCart

在我的网站上,我正在搜索术语"红色"。我看到了一些结果,例如:

  • 红毛毡袋
  • 红色笔记本电脑包
  • 等等…

但我也得到这样的结果:

  • 信用卡封面
  • 信用卡封皮
  • 等。

这是因为字母"红色"存在于单词"信用"的内部。我怎样才能避免这种情况,只搜索整个单词/术语?

我没有想到张贴整个搜索。php文件,因为我认为这将是有点多,是针对那些可能知道他们需要我复制这里看。

这是因为互联网上99.999999%的搜索都是以这种方式工作的。我明白你只想给你的客户提供最相关的结果,但你可能忘记了你的网页的用户友好性。

客户现在习惯于搜索yes这样的术语,并期望得到YesyesterdayYesus等结果。甚至当他们不知道单词是如何继续的,只记得单词的词根,或者当更多的单词有相同的词根时,例如Nebulanebulosa(猫头鹰的拉丁种名strix nebulosa),他们有相同的词根nebul。现在,当您应用所需的搜索修改时,将不会找到任何结果,直到使用正确的单词

但是好吧,这里是必需的更改-您需要在getProducts()方法中更改catalog/model/catalog/product.php中的两行-找到这一行(大约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     -^

经过这两个更改后,搜索应该像期望的那样工作(仅搜索产品标题和描述中的完整单词)。