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

  • 相关阅读:
    软件测试学习总结
    MySQL数据库中主键和索引的区别和联系
    什么是接口测试及其测试流程
    bug生命周期
    啊这...2-get/post请求区别,来给你看看post请求url中传参
    啊这...1-get/post请求区别,你还在认为get只能在url传参吗?传json格式会咋样?
    关于博客园全站内容审核中...如出现此问题:请移步xxx
    git-2-企业级gitlab的使用及管理工具Sourcetree
    fiddler-12-Proxifier+fiddler进行PC端抓包
    微信小程序弹出订阅消息确认弹窗的限制
  • 原文地址:https://www.cnblogs.com/zl0372/p/sphinx_17.html
Copyright © 2011-2022 走看看