需求描述

  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

sphinx设置多属性过滤的方法(setFilter)的更多相关文章

  1. vue的iview列表table render函数设置DOM属性值的方法

    { title: '负责人社保照片', key: 'leaderIdNumber', render: (h, params) => { return h('img',{domProps:{ sr ...

  2. 两种方法设置disabled属性

    //两种方法设置disabled属性 $('#fileup').attr("disabled",true); $('#fileup').attr("disabled&qu ...

  3. 两种设置disabled属性以及三种方法移除disabled属性

    //两种方法设置disabled属性 $('#areaSelect').attr("disabled",true); $('#areaSelect').attr("dis ...

  4. 类的继承和多态性-编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 getLegs(),设置动物名称的方法 setKind(),获得动物名称的方法 getKind(),获得动物数量的方法 getCount()。定义Fish类,是Animal类的子类,

    编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 ...

  5. dedecms 使noflag参数及其过滤多个属性的修改方法

    noflag='h' 是代表不包含头条属性的意思,其中flag就是属性, 自定义属性值:头条[h]推荐[c]图片[p]幻灯[f]滚动[s]跳转[j]图文[a]加粗[b]. noflag过滤多个属性的修 ...

  6. PHP中的__get()和__set()方法获取设置私有属性

    在类的封装中,获取属性可以自定义getXXX()和setXXX()方法,当一个类中有多个属性时,使用这种方式就会很麻烦.为此PHP5中预定义了__get()和__set()方法,其中__get()方法 ...

  7. 自定义类属性设置及setter、getter方法的内部实现

    属性是可以说是面向对象语言中封装的一个体现,在自定义类中设置属性就相当于定义了一个私有变量.设置器(setter方法)以及访问器(getter方法),其中无论是变量的定义,方法的声明和实现都是系统自动 ...

  8. 在jquery中应该使用prop方法来获取和设置checked属性,不应该使用attr。

    在jquery中应该使用prop方法来获取和设置checked属性,不应该使用attr. $("#checkAll").prop("checked", true ...

  9. js 获取和设置css3 属性值的实现方法

    众多周知 CSS3 增加了很多属性,在读写的时候就没有原先那么方便了. 如:<div style="left:100px"></div> 只考虑行间样式的话 ...

随机推荐

  1. 浅谈OI中的提交答案

    在OI中,题目有三类: 传统题 交互题 提交答案题 今天来了解一下第三类 概述 传统题:给你一个题面,你需要交一个程序,评测姬会用你的程序运行你看不到的一些测试点,用输出和正确答案比较 提交答案题:给 ...

  2. BZOJ 3594 [Scoi2014]方伯伯的玉米田(二维树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3594 [题目大意] 给出一个数列,选出k个区间使得区间内数全部加1, 求k次操作之后最 ...

  3. iOS 11 安全区域适配

    //解决iOS11,仅实现heightForHeaderInSection,没有实现viewForHeaderInSection方法时,section间距大的问题 [UITableView appea ...

  4. CentOS 6.9/Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用

    说明: 1.发现一个很奇怪的现象,CentOS和Ubuntu有着对用户不同的管理理念,比如CentOS中安装一切软件都是以root优先(su -),而Ubuntu则以当前用户优先,安装软件以sudo开 ...

  5. [Bug]Object reference not set to an instance of an object.

    引言 今天在客户这儿,由一个问题导致,需求的变化,不得不修改代码,在记录日志中出现该问题. 原因 通过id查找相关信息,没有判断是否为null,集合是否有数据. Object reference no ...

  6. TWinHTTP

    TWinHTTP USES SynCrtSock procedure hget(const url: string; var ResponseCode: Integer; var ResponseHe ...

  7. Sqlserver__数据表排序记录和界面显示排序记录不一致的问题

    背景:     数据表中有编号为1-20的20条记录,有一个排序字段OrderIndex, 其中1/3为0,1/3为1,1/3为2   现象:     每次在sqlserver执行OrderIndex ...

  8. NSIS安装包制作

    6)闪屏界面,可以在源代码中加入下列代码即可: A.普通效果 以下是代码片段: Function .onInit SetOutPath $TEMP File /oname=spltmp.bmp &qu ...

  9. PTCRS 目前投资最成功的的PTC站点

    PTCRS算是我投资的比较成功的一个PTC网站,因此首先和大家介绍一下,因为PTC最开始的几个月盈利空间非常大,即使这样,在这20多天里面站长也已经稍微调低了盈利水平. 目前基本上Golden会员租赁 ...

  10. MySQL建表时,日期时间类型选择

    MySQL(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...