我试图在我的codeIgniter项目中实现一个搜索功能。我有一个名为product_search的表,其中使用以下命令设置全文索引:

ALTER TABLE `product_search` ADD FULLTEXT (`prod_title`, `prod_desc`)

然后我使用以下codeIgniter代码搜索它:
$this->db->select("prod_id");
$this->db->where("MATCH (`prod_title`, `prod_desc`) AGAINST ('{$searchStr}')");
$this->db->or_where("prod_id LIKE '%{$searchStr}%'");
$this->db->or_where("prod_sku LIKE '%{$searchStr}%'");
$this->db->or_where("prod_title LIKE '%{$searchStr}%'");
$this->db->or_where("prod_desc LIKE '%{$searchStr}%'");

$query = $this->db->get("product_search");

但是,这会导致以下错误:
错误号:1064
您的SQL语法有错误;请检查对应于MySQL服务器版本的手册,以获取在第3行的“AGAINST('silk')或prod_idLIKE'%silk%'或prod_skuLIKE'%silk%'或'prod'附近使用的正确语法
从(prod_id)中选择product_search,其中MATCHprod_titleprod_desc)针对('silk')或prod_id类似于'%silk%'或prod_sku类似于'%silk%'或prod_title类似于'%silk%''
文件名:models/products_model.php
行号:430
为什么要在比赛中使用反拍?
如果删除MATCH和其后括号之间的空格,则会收到此错误消息:
错误号:1191
找不到与列列表匹配的全文索引
从(prod_desc)中选择prod_id,其中(product_searchprod_title)与('silk')匹配,或选择prod_desc类似于'%silk%'或prod_id类似于'%silk%'或prod_sku类似于'%silk%'或prod_title类似于'%silk%'
文件名:models/products_model.php
行号:430
但是,我使用top命令添加全文索引。
怎么了?

最佳答案

我通过将BOOLEAN模式添加到account部分解决了这个问题,语句如下:

SELECT `prod_id`
FROM (`product_search`)
WHERE MATCH (`prod_title`, `prod_desc`) AGAINST ('silk' IN BOOLEAN MODE)
OR `prod_id` LIKE '%silk%' OR `prod_sku` LIKE '%silk%'
OR `prod_title` LIKE '%silk%'
OR `prod_desc` LIKE '%silk%';

09-26 07:31