【发布时间】:2013-07-03 22:45:43
【问题描述】:
我有一个搜索查询,它在数据库上执行全文搜索。
$sql = "SELECT
*
FROM
`tbl_auction_listing` AS `al`
JOIN
`tbl_user` AS `u` ON `al`.`user_id` = `u`.`user_id`
LEFT JOIN
`tbl_gallery_details` AS `gd` ON `al`.`user_id` = `gd`.`user_id`
LEFT JOIN
`tbl_self_represented_details` AS `sr` ON `u`.`user_id` = `sr`.`user_id`
WHERE
`al`.`status` = '" . ACTIVE . "'
AND
`al`.`start_date` < NOW()
AND
`al`.`end_date` > NOW()
AND
MATCH(`al`.`listing_title`,
`al`.`description`,
`al`.`provenance`,
`al`.`title`,
`al`.`artist_full_name`,
`al`.`artist_first_name`,
`al`.`artist_last_name`,
`sr`.`artist_name`,
`gd`.`gallery_name`,
`u`.`username`) AGAINST('$search_query' IN BOOLEAN MODE)";
当我搜索 'Cardozo, Horacio' 或 'cardozo' 或 'horacio' 时,我没有得到任何结果,但我知道有一位艺术家在 db 中有 2 条记录,artist_full_name = Cardozo, Horacio。
如果我删除所有 MATCH 字段并且只有 al.artist_full_name 我会得到 2 个结果。如果我添加 al.description 我会得到 1 个结果,因为描述中存在“Horacio Cardozo”。
如果在任何 MATCH 字段中满足任何条件(任何搜索查询词),是否有办法让搜索返回所有记录?我尝试删除 IN BOOLEAN MODE,但结果相同。
【问题讨论】:
-
代替
IN BOOLEAN MODE,试试IN NATURAL LANGUAGE MODE -
IN NATURAL LANGUAGE MODE是默认模式(即未指定模式时) -
搜索时仍然产生 0 个结果。我检查了数据库中的所有字段都是全文但仍然没有。