我正在使用OpenCart
在我的网站上,我正在搜索术语"红色"。我看到了一些结果,例如:
- 红毛毡袋
- 红色笔记本电脑包
- 等等…
但我也得到这样的结果:
- 信用卡封面
- 信用卡封皮
- 等。
这是因为字母"红色"存在于单词"信用"的内部。我怎样才能避免这种情况,只搜索整个单词/术语?
我没有想到张贴整个搜索。php文件,因为我认为这将是有点多,是针对那些可能知道他们需要我复制这里看。
这是因为互联网上99.999999%的搜索都是以这种方式工作的。我明白你只想给你的客户提供最相关的结果,但你可能忘记了你的网页的用户友好性。
客户现在习惯于搜索yes
这样的术语,并期望得到Yes
、yesterday
、Yesus
等结果。甚至当他们不知道单词是如何继续的,只记得单词的词根,或者当更多的单词有相同的词根时,例如Nebula
和nebulosa
(猫头鹰的拉丁种名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 -^
经过这两个更改后,搜索应该像期望的那样工作(仅搜索产品标题和描述中的完整单词)。