做了一个小项目,需要一个检索功能,考虑到项目的性质,不需要弄的太复杂,所以采用mysql全文索引来做,本来以为设置个fulltext全文索引就完事儿了,没想到坑是一个接一个,把遇到的坑写下来,做一个记录
我的mysql版本:5.7.16 InnoDB; 注意:数据库版本要大于等于MySQL5.7.6,不然不支持InnoDB类型。
找到需要添加索引的字段,设置全文索引,结果啥也搜索不出来。有一下原因
一:mysql分词,默认4字符的问题。
按照度娘的答案,在my.cnf文件中设置 ft_min_word_len=1,重启完全没有效果,俩个字的还是搜索不出来,原因是我的数据库是InnoDB,这个类型要设置的是 innodb_ft_min_token_size = 1
image.png
二:设置好最小词数后,搜索俩个字有些能出来,有些不能出来,比如:A:“朋友 敌人” B:"我有一个朋友和一个敌人" 当搜索朋友的时候,A记录能出来 B记录不能出来
原因是如果不手动配置的情况下 mysql是按照空格来分词的,但是中文的书写规则大部分没有空格,所以处理中文的时候 难以命中目标;好在mysql内置了一个中文分词器:ngram
在设置全文索引时注意添加分词器,如图
image.png
然后重建索引,这样就能够进行中文分词了
具体请参照这位大大的文章
https://www.yiibai.com/mysql/ngram-full-text-parser.html
网友评论