- 论坛徽章:
- 0
|
10可用积分
有如下表,
| email | CREATE TABLE `email` (
`email` varchar(250) character set latin1 collate latin1_bin NOT NULL default '',
FULLTEXT KEY `idx_email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
表中含有不规范的邮件地址如下:
mysql> select * from email limit 10;
+-----------------------------+
| email |
+-----------------------------+
| axycy@gmail.com |
| 0000000000@cox.net |
| 00000000@00000.com |
| 00000@163.com |
| 000 |
| 0000@hotmail.com |
| 00073076@snow.edu |
| |
| 000k100@gmail.com |
| 001870@cmail.com |
+-----------------------------+
查询要求:返回正确的邮件地址。即含@字符。
方法1: 使用条件like '%@%'
方法2:使用全文索引
修改相关变量如下:
mysql> show variables like 'ft%';
+--------------------------+----------------+
| Variable_name | Value |
+--------------------------+----------------+
| ft_boolean_syntax | + -><()~*:""&| |
| ft_max_word_len | 84 |
| ft_min_word_len | 1 |
| ft_query_expansion_limit | 20 |
| ft_stopword_file | (built-in) |
但是没有正确结果返回。
mysql> select * from email where match(email) against ('@');
Empty set (0.00 sec)
官方文档中提示
若要覆盖默认停止字,则可设置 ft_stopword_file 系统变量。 (见5.3.3节,“服务器系统变量”)。 变量值应为包含停止字的文件路径名, 或是用来截止禁用词过滤的空字符串。在改变了这个变量的值或禁用词文件的内容后, 重建你的 FULLTEXT索引。
于是修改为:
mysql> show variables like 'ft%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| ft_boolean_syntax | + -><()~*:""&| |
| ft_max_word_len | 84 |
| ft_min_word_len | 1 |
| ft_query_expansion_limit | 20 |
| ft_stopword_file | /usr/local/mysql/stopword_file |
但测试发现,仍未生效。
mysql> select * from email where match(email) against ("@");
Empty set (0.00 sec)
mysql> select * from email where match(email) against ('@' in boolean mode);
Empty set (0.01 sec)
请大家帮忙。
[ 本帖最后由 r_a 于 2008-3-10 14:01 编辑 ] |
最佳答案
查看完整内容
貌似全文搜索会忽略英文的标点符号,把@换成中文的@或者转义代码能绕过去,当然还是有种种不便
评分
-
查看全部评分
|