需求描述

  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. hdu 1864 最大报销额(背包)

    最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  2. 【set】【链表】hdu6058 Kanade's sum

    f(l,r,K)表示区间l,r里面的K大值,问你所有连续子区间的f之和. l(i)表示i左侧第一个比它大的数的位置,r(i)表示i右侧第一个比它大的数的位置.可以用set处理出来. 把数从大到小排序, ...

  3. 【贪心】POJ2393-Yogurt Factory

    [思路] 水题,没什么好说的.每周为之后多生产的牛奶可以看作之后才生产的.每周最少生产单价=min(上周生产的最小单价+储存单价,本周生产单价).注意ans是long long,否则会WA. #inc ...

  4. 网络编程之tcp五层模型

    网络编程 1.客户端与服务端架构:C/S   B/S  架构 client <-------基于网络通信-------->server brower<-------基于网络通信--- ...

  5. [POI2008]Triangles

    题目大意: 平面直角坐标系上有n个点,问以这n个点为顶点的不同的三角形的面积和是多少? 思路: 很容易想到一个O(n^3)的暴力,枚举三个点,用海龙公式求一下面积和即可,这样做是40分. 标算的复杂度 ...

  6. OpenVPN官方资源下载和官方教程入口

    官方资源: https://openvpn.net/index.php/open-source/downloads.html 2.4.4版本下载:(链接: https://pan.baidu.com/ ...

  7. 移动应用安全开发指南(Android)--数据存储

    1.数据存储 概述 移动应用经常需要在某些场景下(比如用户登录)处理和用户或业务相关的敏感数据,有时候为满足某些业务需求,需要把这些敏感数据存储在本地,如果不对这些数据进行适当处理,就有可能存在敏感信 ...

  8. 用C#写个邮件监控服务(一)

    监控服务,首先当然是个服务了.至于什么是windows服务,这里就不多说了.正题 1. 创建服务项目 打开VS编程环境,在C#中创建windows服务项目 2.创建后属性中更改名称和服务名. 3.增加 ...

  9. 查看mysql服务器连接

    查看服务器连接,排查连接过多,查看连接状态时特别有用! 命令: show full processlist 作用: 显示当前运行的线程以及状态,也可以根据该命令来查看服务器状态. Id: 连接Id.U ...

  10. Unity3d-Socket之龙一编年史network.dll分析(2)-> CNetLogger

    今天呢,我们来学习下network.dll里面的CNetLogger类. 顾名思义,这个类主要是debug用的,也许有些人会问了,干嘛要自己封装个debug,直接用unity自带的debug不就好了吗 ...