zoukankan      html  css  js  c++  java
  • 使用sphinx搜索子域名过程中需注意的问题

    场景:搜索子域名

    比如搜索yzswyl.cn会把www.yzswyl.cn、yzswyl.cn、host.yzswyl.cn等都搜索出来。

    如果使用mysql用like的话效率是非常低的,几百万甚至上千万的数据那是没有办法使用的,于是采取sphinx来做。

    在使用的过程中发现了诸多问题,这里将其总结起来,也让不知道的朋友注意下这些字符。

    分析:

    sphinx是全文索引,它搜索的是包含的记录。

    首先如果我们不做任何设置的话,搜索yzswyl.cn会出现把aayzswyl.cn、yzswyl.a.cn、yzswyl.cn.com(当然这个域名后缀不存在,但是会有符合相应规则的域名,这里只举例)等等。

    为什么会出现这种情况呢?

    我们使用./search -c 配置文件 -i 索引名 'yzswyl.cn' 搜索的时候会发现下面words部分被分成了两部分'yzswyl'和'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码值

    这样会解决掉搜出yzswyl.a.cn这类域名。

    那么yzswyl.cn.com这类呢?我们可以在索引的字段中增加惟一后缀比如“XXXXX”,concat(search,'XXXXX')这样,就不会出来了。

    现在就剩下aayzswyl.cn这类域名,我们使用关键字“ '".yzswyl.cn"' ”(注意是单引号里面套双引号)这样来搜索,主域名单独加上,但是使用的过程中发现这样搜出了与这个域名无关的域名,比如aa.bb.cn这样,经后来研究是"."的问题,后来把"."替换成"@",来搜索又出现12306等好多域名无法读取到的问题,后来经研究估计这些特殊字符在sphinx中都有特殊的意义,于是找到了"`"这个字符,换成这个以后一切才算正常了。

    注意:将"."替换成"`"等相应字符后需在charset_table里增加这个字符,不然是被忽略的。

    所以在搜索的过程中我们需要注意下这些特殊字符。

    此博客已不再更新,如需查看最新文章请访问http://www.xuejiehome.com
  • 相关阅读:
    Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明
    Hibernate框架 初识 ORM概念 搭建Hibernate环境 Hibernate Api
    Struts 框架 之 文件上传下载案例
    Struts 之 通配符 路径匹配 常量用法 配置默认值
    Struts框架之 执行流程 struts.xml 配置详细
    Struts 框架 之 Hello World
    JSP include HTML出现乱码 问题解决
    java 集合 Connection 栈 队列 及一些常用
    java Gui编程 事件监听机制
    java 网络编程 UDP TCP
  • 原文地址:https://www.cnblogs.com/xuejie/p/2876246.html
Copyright © 2011-2022 走看看