我有具有结构的表产品:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
CREATE TABLE `products` (
`id` bigint(20) UNSIGNED NOT NULL,
`user_id` bigint(20) UNSIGNED NOT NULL,
`title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`description` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`market_size` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`request` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`price` double DEFAULT NULL,
`total` bigint(20) DEFAULT NULL,
`unit` enum('kg','pc') COLLATE utf8mb4_unicode_ci NOT NULL,
`type_of_sale` enum('retail','wholesale') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'retail',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `products`
ADD PRIMARY KEY (`id`),
ADD KEY `products_user_id_foreign` (`user_id`),
ADD KEY `products_title_index` (`title`);
ALTER TABLE `products` ADD FULLTEXT KEY `fulltext_index` (`title`,`description`);
ALTER TABLE `products`
MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;
ALTER TABLE `products`
ADD CONSTRAINT `products_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
COMMIT;
当我使用查询对表产品进行搜索时:
SELECT * FROM `products` WHERE MATCH(title,description) AGAINST('Hatter' IN BOOLEAN MODE)
然后得到 32 个结果,但是当我尝试使用这个查询模板词 atter
、att
或 ter
时没有得到任何结果。我如何才能正确获得结果,或者我的查询有误?
MariaDB 版本:10.3.22
答案 0 :(得分:0)
听起来你只是想要like
:
where title like '%atter%' or
description like '%atter%'
MATCH()
不等同于 LIKE
。它们做不同的事情,对于文本搜索,MATCH()
通常更接近用户的实际需要。在很多情况下,人们开始使用 LIKE
,然后意识到 MATCH()
更合适。这听起来像是相反的情况。
但是,如果您需要通配符搜索文本中的任意子字符串,那么 LIKE
或 REGEXP
可能是您真正需要的。当然,这种情况下的问题是性能。