• sphinx设置多属性过滤的方法(setFilter)


    需求描述

      mysql中,每一个文档都有多个标签,查询时可以筛选一个标签也可以筛选同时拥有多个标签的文档。

      数据示例

      文档 标签
        1    1,2,3,4,5
        2    2,3,4,5,6
        3    3,4,5,6,7
        4    4,5,6,7,8
        5    5,6,7,8,9
      注意:
      这里将文档id和标签tagid的对应关系存入了fy_content_tag表,一个id对应多条tagid记录

      查询要求

      1、查出拥有标签2的文档
      2、查出同时拥有标签2,3,4的文档

      使用sphinx解决需求

      1、配置shpinx mva多值属性

      编辑sphinx配置文件,给数据源增加一个多值属性

      sql_query = SELECT id,tagid FROM fy_content_tag

          sql_attr_multi = uint tagid from field tagid
      
      2、执行查询

      使用API中的setFilter即可。

      1、查出拥有标签2的文档

      $sphinx->setFilter('tagid', array(2));
      2、查出同时拥有标签2,3,4的文档

      $sphinx->setFilter('tagid', array(2));
      $sphinx->setFilter('tagid', array(3));
      $sphinx->setFilter('tagid', array(4));
      这里解释一下:
      $sphinx->setFilter(‘tagid’, array(2,3,4));
      是表示含有标签值2,3,4中的任意一个即符合筛选,这里是or关系。

      $sphinx->setFilter(‘tagid’, array(2));
      $sphinx->setFilter(‘tagid’, array(3));
      $sphinx->setFilter(‘tagid’, array(4));
      设置三个filter是标示,要同时满足2,3,4三个属性值才符合,这里是and关系。

      Sphinx sql_attr_multi配置参考

      在Sphinx中,有一个MVA属性,声明格式如下(用反斜线只是为了清晰,您仍可以在一行之内完成声明):
      sql_attr_multi = ATTR-TYPE ATTR-NAME ‘from’ SOURCE-TYPE
      [;QUERY]
      [;RANGE-QUERY]
      其中
      ATTR-TYPE 是 ‘uint’ 或 ‘timestamp’之一
      SOURCE-TYPE 是 ‘field’, ‘query’, 或 ‘ranged-query’之一
      QUERY 是用来取得全部(文档 ID,属性值)序对的 SQL 查询
      RANGE-QUERY 是用来取得文档 ID 的最小值与最大值的 SQL 查询,
      与’sql_query_range’类似
      示例:
      sql_attr_multi = uint tag from field;
      sql_attr_multi = uint tag from query; SELECT id, tag FROM tags
      sql_attr_multi = uint tag from ranged-query;
      SELECT id, tag FROM tags WHERE id>=$start AND id<=$end;
      SELECT MIN(id), MAX(id) FROM tags

      使用field类型时,field字段的值应该是以英文逗号隔开的多个无符号32位整数,如:1,2,3,4

      使用query或者ranged-query时,每行一个值,一个id对应多个(多行)tag值

      原文:http://blog.sina.com.cn/s/blog_7eef675d0101fimb.html

  • 相关阅读:
    Web APIs
    变量替换
    用shell脚本实现文件、代码同步上线
    20.31 expect脚本同步文件 20.32 expect脚本指定host和要同步的文件 20.33 构建文件分发系统 20.34 批量远程执行命令
    20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数
    20.23/20.24/20.25 告警系统邮件引擎 20.26 运行告警系统
    20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析
    20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断
    16进制数据拆分
    16进制数据拼接成一个
  • 原文地址:https://www.cnblogs.com/zl0372/p/sphinx_17.html
Copyright © 2020-2023  润新知