聊下sphinx 2.2.11安装和使用

36 阅读3分钟

安装

服务器是Centos 6的版本,但需要用到全文搜索,数据量不大,100多万,只需要轻量的就可以,mysql 5.7 虽然也是全文索引功能但速度方面比较慢,考虑了其他的方案比如MeiliSearch如果CentOS 7或Ubuntu等系统可以考虑,但它在CentOS 6上不支持,ElasticSearch 又比较重,所以还是选择安装Sphinx

下载

本次通过 下载源码 wget sphinxsearch.com/files/sphin… 编译安装

安装

进入解压后的sphinx 目录 ,执行: ./configure –prefix=/usr/local/sphinx –with-mysql –with-sphinxql

  • –prefix 表示安装目录,以上只是示例,你可以改成自己的
  • –with-mysql 表示启用 MySQL 客户端库支持,必选项,如果没有的话,可能就不能从mysql中导入源数据了
  • –with-sphinxql 表示编译时启用 SphinxQL 接口(MySQL 协议兼容接口),启用后在后面使用过程中,searchd 会提供一个 MySQL 协议兼容端口(默认 9306)
    配置
  • 索引分2种,一种是磁盘索引,一种是实时索引 RT
  • sql_field_string 这个属性定义字符串类型的全文字段,字段内容会被分词、建立倒排索引,用于搜索匹配
  • sql_attr_uint 无符号整数型属性,属性不会被全文索引,但可以用来,
  • 过滤(WHERE user_id=123)
  • 排序(ORDER BY user_id DESC) -分组(GROUP BY user_id)
  • sql_range_step 控制每次查询分片的步长,表示 indexer 在建索引时,会把 ID 范围分批处理,每次处理 10000 条,避免一次性 SELECT 全表导致内存或锁压力
  • sql_attr_timestamp 定义一个 时间戳属性(通常是 UNIX_TIMESTAMP() 的结果)常用于
  • 按时间范围过滤:WHERE created_at > 1690000000
  • 按时间排序:ORDER BY created_at DESC
  • sql_ranged_throttle 表示每批次 SELECT 之间的休眠时间,单位毫秒
  • 实时索引 rt_field 属性 表示 实时索引的全文字段,相当于磁盘索引里的 sql_field_string,存放需要分词检索的内容
  • rt_attr_string 定义一个 字符串属性。不会参与分词,但可以作为过滤、排序、输出用。
  • rt_attr_uint 定义一个 无符号整型属性。用途和磁盘索引里的sql_attr_uint 相同
  • sql_query 这个属性用于配置数据源,sphinx从这个属性提供的SQL导入数据用为索引用于检索。 例如:sql_query =
    SELECT
    id, \ art_title, \ art_img, \ art_sort, \ UNIX_TIMESTAMP(art_add_time) AS created_at, \ UNIX_TIMESTAMP(art_update_time) AS updated_at, \ class_id, \ user_id AS user_id, \
    FROM articles
    WHERE id BETWEEN startANDend
  • sql_attr_uint = user_id #表示 INT型的属性
  • sql_attr_uint = class_id
    建索引
  • ./sphinx/bin/indexer –config /etc/sphinx.conf 表示建索引,后面还可以加选项,–rotate表示 转轮,即不会影响现在正在使用的索引,新建完后才替换原来的索引,一般用于生产环境,还可以指定哪个索引 比如 article_index
    启动
  • /sphinx/bin/searchd –config /etc/sphinx.conf ,如果正在运行的,要重启的话,后面加个 –stop 参数 ,比如 /sphinx/bin/searchd –config /etc/sphinx.conf –stop

使用

  • 可以通过 mysql -h0 -P9306 进入mysql客户端
  • 可以通过 api 连接 9306 端口,进行查询等操作