
ALTER TABLE tablename ENGINE = MYISAM;2.在需要进行全文搜索的列上添加全文索引:
ALTER TABLE products ADD FULLTEXT(title, sdescription, ldescription)3.完成以上两步之后,我们就已成功开启了对应表的全文搜索功能,那下面就可以进行全文搜索了:
SELECT * FROM ARTICLES WHERE MATCH (Title, Description) AGAINST ('search words');以上的搜索会返回文章标题和描述中包含任一关键字的结果,即只要标题和描述中包含"search","words"的任意一个,都会算匹配,但这并不是我想要的结果。所以,还得用"IN BOOLEAN MODE"来筛选我的搜索结果。如下:
SELECT * FROM ARTICLES WHERE MATCH (Title, Description) AGAINST ('+search +words' IN BOOLEAN MODE);这条语句中使用了一个+(操作符),下面说明一下Full-Text的操作符: +:表示AND - :表示NOT [空]: OR 还是以本文的需求举例: 1.+search +words:返回同时包含search和words的文章记录; 2.+search -words:返回包含search但不包含words的文章记录; 3.+search words:返回必须包含search的文章记录,但包含words的记录会排在前面; 4.+search ~words:返回必须包含search的文章记录,包含words的记录会排在后面; 5.+search +(>with <words):返回包含search和with或者包含search和words的记录,但search with会排在前面 以上就是操作符的使用详细说明了,具体请结合实际测试使用
全文搜索还可以进行搜索匹配度排序,比如:如果在文章标题中搜索到关键字,则匹配度为10,如果在文章描述中搜索到关键字,匹配度为3,那么实现如下:
SELECT *, MATCH(`Title`) AGAINST ('+searcd +words' IN BOOLEAN MODE) * 10 as rel1, MATCH(`Description`) AGAINST ('+searcd +words' IN BOOLEAN MODE) * 3 as rel2, FROM ARTICLE WHERE MATCH (Title, Description) AGAINST ('+searcd +words' IN BOOLEAN MODE) ORDER BY (rel1)+(rel2) DESC;这样,查询的结果就会以关键词的匹配度从高到低来排序。 好了,关于MySQL的全文搜索实现就差不多了,具体的理论深入网上也是很多资料,我就不在此列举了(我自己也是需要再去深入了解和研究关于MySQL全文搜索的理论知识),下面说一下在使用MySQL中可能遇到的问题(英文): 1.全文搜索是忽略大小写的; 2.MySQL全文搜索的默认最小关键字长度为4,如果关键字长度小于此值,则没有记录返回,修改方法: 在MySQL的配置文件的[mysqld]后面添加一行:ft_min_word_len=1(值根据需求定) 3.你可以指定全文搜索忽略的关键字,设置方法为: 在MySQL的配置文件的[mysqld]后面添加一行:ft_stopword_file="d:/stopword.txt",stopword.txt文件中填写以逗号或换行符隔开的需要忽略的关键字。如果ft_stopword_file=空,那么全文搜索会跳过忽略关键字。 4.如果一个关键字的搜索结果大于整个表记录的50%,则不会有记录返回。
以上就是自己在初次使用MySQL全文搜索的整个过程和总结,接下来要做的事情还是很多的。需要加强对MySQL各方面的学习和了解。这样会给自己解决问题提供更多思路和方法。
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册