3
私は、一例として、以下のデータベーススキーマています:MySQLフルテキスト検索を使用して一部の単語を一致させますか?
CREATE TABLE IF NOT EXISTS `items` (
`id` int(11) unsigned NOT NULL,
`irn` varchar(30) NOT NULL,
`name` varchar(225) NOT NULL,
`description` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `name_desc_irn` (`name`,`description`,`irn`),
FULLTEXT KEY `name` (`name`),
FULLTEXT KEY `description` (`description`),
FULLTEXT KEY `irn` (`irn`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
、次のデータ(実際に、私は10万人以上のレコードを持って、簡素化され、ここでデータを想定)
id name irn description
1 Widget A ABC12345 testing ABC12345
2 Widget B ABC-12345 the ABC is great
そして次クエリ:
SELECT
items.id as id,
items.irn as irn,
items.name as name,
(
((MATCH (irn) AGAINST ('12345')) * 5) +
((MATCH (name) AGAINST ('12345')) * 4) +
((MATCH (description) AGAINST ('12345')) * 3) +
(MATCH(name, description, irn) AGAINST ('12345'))
) AS relevance
FROM
items
WHERE
MATCH(name, description, irn) AGAINST ('*12345' IN BOOLEAN MODE)
HAVING
relevance > 0
ORDER BY
relevance DESC
2番目の結果(ABC-12345のirn)は返されますが、最初の結果(ABC12345)は返されません。なぜそれはABC12345と一致しませんが、ABC-12345と一致しますか? Fulltext検索を使用して両方を一致させる方法はありますか?そうでない場合は、12345を検索するときにABC12345とABC-12345の両方が見つかった場合、このタイプの検索を実行する最も適切な方法は何ですか?