mysql中使用sphinx搜索子域名需注意的问题
搜索子域名
比如搜索jb51.会把.jb51.、jb51.、host.jb51.等都搜索出来。
如果使用mysql用like的话效率是非常低的,几百万甚至上千万的数据那是没有办法使用的,于是采取sphinx来做。
在使用的过程中发现了诸多问题,这里将其起来,也让不知道的朋友注意下这些字符。
分析
sphinx是全文索引,它搜索的是包含的记录。
如果我们不做任何设置的话,搜索jb51.会出现把aajb51.、jb51.a.、jb51..(这个域名后缀不存在,会有符合相应规则的域名,这里只举例)等等。
为什么会出现这种情况呢?
我们使用./search -c 配置文件 -i 索引名 'jb51.' 搜索的时候会发现狼蚁网站SEO优化words部分被分成了两部分'jb51'和'',默认以.作为分隔符,如果我们不想让它做为分隔符,就需要把.添加到charset_table里面,这里需要说的是我们搜索域名只需要有字母、数字、"-"等字符,其他的不需要。设置如下
charset_table = 0..9,A..Z->a..z, a..z,U+002e,U+002d,U+0040,U+0060 #其中U+002e代表".",U+002d代表"-",U+0040代表"@",U+0060代表"`",这里为ascii码值。
这样会解决掉搜出jb51.a.这类域名。
那么jb51..这类呢?我们可以在索引的字段中增加惟一后缀比如“XXXXX”,concat(search,'XXXXX')这样,就不会出来了。
现在就剩下aajb51.这类域名,我们使用关键字“ '".jb51."' ”(注意是单引号里面套双引号)这样来搜索,主域名单独加上,使用的过程中发现这样搜出了与这个域名无关的域名,比如aa.bb.这样,经后来研究是"."的问题,后来把"."替换成"@",来搜索又出现12306等好多域名无法读取到的问题,后来经研究估计这些特殊字符在sphinx中都有特殊的意义,于是找到了"`"这个字符,换成这个以后一切才算正常了。
注意将"."替换成"`"等相应字符后需在charset_table里增加这个字符,不然是被忽略的。
所以在搜索的过程中我们需要注意下这些特殊字符。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程