我正在尝试通过使用match
、against
和fulltext indexing
来实现数据库搜索。因此,当我进行搜索时,它没有按预期工作,没有错误,也没有给出任何结果。我正在使用代码点火器进行查询。
这是我的PHP查询代码:
$clean_keyword = trim($keywords); //$keyword is passed to the function`
$this->db->select('question, answer')
->from('QA')
->where('MATCH(question) AGAINST("'.$clean_keyword.'")', null, FALSE);
$query = $this->db->get(); //execute the previous statement and save the result in a variable.
没有给出来自codeigniter/MySQL的错误。
我试图通过执行var_dump($query)
来调试$query
变量,查看结果(注意。重要的部分是result_array
与size=0
):
object(CI_DB_mysql_result)[19]
public 'conn_id' => resource(30, mysql link persistent)
public 'result_id' => resource(38, mysql result)
public 'result_array' =>
array (size=0)
empty
public 'result_object' =>
array (size=0)
empty
public 'custom_result_object' =>
array (size=0)
empty
public 'current_row' => int 0
public 'num_rows' => int 0
public 'row_data' => null
MySQL 表架构:
CREATE TABLE `QA` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`question` varchar(200) CHARACTER SET utf8 NOT NULL,
`answer` varchar(500) CHARACTER SET utf8 NOT NULL,
`u_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `question` (`question`)
) ENGINE=MyISAM
我的代码/数据库架构或任何内容都没有错误,我只是意识到FULLTEXT search
没有显示仅包含 1 个单词的匹配项,例如:
如果我查询这个:SELECT * FROM QA WHERE MATCH(question) AGAINST('drive');
并且有一个问题只有drive
这个词,我没有得到匹配。
但是,如果我更改drive
问题列,则how to drive
得到匹配。