zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Python使用MySQL数据库的方法以及一个实例
    【转载】关于Python中的yield
    利用KMeans聚类进行航空公司客户价值分析
    Python多线程编程
    搜索与排名思路整理
    两个UIView添加同一个手势只有最后一个有用
    缩放动画效果
    iOS通过UIAlertController弹出底部选择框来调用相机或者相册
    ios webview点击图片看大图效果及相应手势操作
    iOS开发:获取设备IP地址
  • 原文地址:https://www.cnblogs.com/zl0372/p/sphinx_17.html
Copyright © 2011-2022 走看看