MySQL 的字段怎样做全文检索最合适?

2014-08-17 15:17:41 +08:00
 wangleineo
有一个表包含一个很短的中文字符串字段(最多20个汉字)。现在需要对这个字段做全文检索,返回此字段包含关键词的记录,我能想到几种方法:
1. 用like语句:select * from mytable where field like "%keyword%'. 缺点:效率太低,索引用不上。
2. 建立FULLTEXT索引,用match() against语句检索。缺点:要求是MyISAM引擎,而且对中文支持不好,需要预先分词。
3. 将字段中的关键词提取出来,建立一个多对多的关系表:记录-关键词,查询关键词,通过外键找到记录。缺点:关键词表开始时难于建立。
4. 用高大上的全文检索引擎Lucence、Sphinx等等,感觉有点小题大作。
各位过来人说说哪个方法最好?
补充:现在这个表大概10万条记录,将来可能达百万条。
4932 次点击
所在节点    问与答
6 条回复
ChiChou
2014-08-17 18:21:44 +08:00
有没有考虑 ElasticSearch ?
wangleineo
2014-08-17 18:38:51 +08:00
@ChiChou ElasticSearch是基于Lucene的吧。我需要索引的文字都非常短(文章标题,十几个字而已,关键词最多出现一次),用全文引擎感觉有点大材小用了。
ChiChou
2014-08-17 18:40:38 +08:00
@wangleineo 还以为是整篇文章的全文搜索。如果只是 keyword 的提取,完全可以找一些分词算法和中文词典,提取出关键字单独存放一个字段。
luckyduck
2014-08-17 19:32:56 +08:00
Full-text indexes can be used only with InnoDB or MyISAM tables, and can be created only for CHAR, VARCHAR, or TEXT columns.
这是从MySQL 5.6以后
em70
2014-08-17 21:53:23 +08:00
100万用like也够用了,没必要再搞复杂的
xxstop
2014-08-17 22:01:27 +08:00
coreseek

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/128379

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX