mysql中使用sphinx搜索子域名需注意的问题
搜索子域名
比如搜索jb51.net会把www.jb51.net、jb51.net、host.jb51.net等都搜索出来。
如果使用mysql用like的话效率是非常低的,几百万甚至上千万的数据那是没有办法使用的,于是采取sphinx来做。
在使用的过程中发现了诸多问题,这里将其总结起来,也让不知道的朋友注意下这些字符。
分析:
sphinx是全文索引,它搜索的是包含的记录。
首先如果我们不做任何设置的话,搜索jb51.net会出现把aajb51.net、jb51.a.cn、jb51.net.com(当然这个域名后缀不存在,但是会有符合相应规则的域名,这里只举例)等等。
为什么会出现这种情况呢?
我们使用./search -c 配置文件 -i 索引名 'jb51.net' 搜索的时候会发现下面words部分被分成了两部分'jb51'和'cn',默认以.作为分隔符,如果我们不想让它做为分隔符,就需要把.添加到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.cn这类域名。
那么jb51.net.com这类呢?我们可以在索引的字段中增加惟一后缀比如“XXXXX”,concat(search,'XXXXX')这样,就不会出来了。
现在就剩下aajb51.net这类域名,我们使用关键字“ '".jb51.net"' ”(注意是单引号里面套双引号)这样来搜索,主域名单独加上,但是使用的过程中发现这样搜出了与这个域名无关的域名,比如aa.bb.cn这样,经后来研究是"."的问题,后来把"."替换成"@",来搜索又出现12306等好多域名无法读取到的问题,后来经研究估计这些特殊字符在sphinx中都有特殊的意义,于是找到了"`"这个字符,换成这个以后一切才算正常了。
注意:将"."替换成"`"等相应字符后需在charset_table里增加这个字符,不然是被忽略的。
所以在搜索的过程中我们需要注意下这些特殊字符。
您可能感兴趣的文章:
- Mysql全文搜索match against的用法
- mysql 模糊搜索的方法介绍
- Mysql Binlog快速遍历搜索记录及binlog数据查看的方法
- mysql全文搜索 sql命令的写法
- mysql 搜索之简单应用
- php利用scws实现mysql全文搜索功能的方法
- php mysql like 实现多关键词搜索的方法
- 详细介绍基于MySQL的搜索引擎MySQL-Fullltext
- mysql 全文搜索 技巧
- MySQL多层级结构-树搜索介绍
- 在MySQL中使用Sphinx实现多线程搜索的方法
- MySQL高效模糊搜索之内置函数locate instr position find_in_set使用详解
- mysql中使用sphinx搜索子域名需注意的问题
- 使用sphinx搜索子域名过程中需注意的问题
- 使用 Sphinx 更好地进行 MySQL 搜索
- 在MySQL中使用通配符时应该注意的问题
- 在MySQL中使用Sphinx实现多线程搜索的方法
- vue+elementUI中使用 el-autocomplete 实现远程搜索的下拉框需要注意的问题
- 使用 Sphinx 更好地进行 MySQL 搜索-使用 Sphinx 进行非全文本搜索
- python中使用mysql要注意的问题
- 使用MySQL,安全问题不能不注意
- 在MySQL中使用通配符时应该注意的问题
- 正确使用mysql + MFC的一个要注意问题
- Hibernate使用注解时的注意问题与mysql的中文乱码问题
- 在MySQL中使用Sphinx实现多线程搜索的方法
- Mysql使用注意问题
- 使用 Sphinx 更好地进行 MySQL 搜索
- mysql使用高版本登录低版本的时候注意的问题
- 在php中使用mysql注意的几个问题
- 使用 Sphinx 更好地进行 MySQL 搜索
- 【已解决】mysql left join使用不了索引问题
- 腾讯云CentOS7.0使用yum安装mysql及使用遇到的问题