SQL mariadb 不返回全文搜索结果

时间:2020-12-25 15:06:37

标签: mysql sql database mariadb full-text-search

我有具有结构的表产品:

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 个结果,但是当我尝试使用这个查询模板词 atterattter 时没有得到任何结果。我如何才能正确获得结果,或者我的查询有误?

MariaDB 版本:10.3.22

1 个答案:

答案 0 :(得分:0)

听起来你只是想要like

where title like '%atter%' or
      description like '%atter%'

MATCH() 不等同于 LIKE。它们做不同的事情,对于文本搜索,MATCH() 通常更接近用户的实际需要。在很多情况下,人们开始使用 LIKE,然后意识到 MATCH() 更合适。这听起来像是相反的情况。

但是,如果您需要通配符搜索文本中的任意子字符串,那么 LIKEREGEXP 可能是您真正需要的。当然,这种情况下的问题是性能。

相关问题