需求描述

  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. 【推导】Codeforces Round #424 (Div. 1, rated, based on VK Cup Finals) A. Office Keys

    选择的钥匙一定是连续的,人和钥匙一定从左到右连续对应. 就枚举钥匙区间即可. #include<cstdio> #include<algorithm> using namesp ...

  2. mybatis批量插入oracle时报错:unique constraint (table name) violated

    mybatis批量插入oracle时报错:unique constraint (table name) violated,是因为插入的集合中有两条相同唯一约束的数据.

  3. openwrt开源系统LUCI配置界面

    转自:http://www.right.com.cn/forum/thread-131035-1-1.html 本人菜鸟,最近在学习这方面的知识,在参考资料的基础上总结如下内容.这篇文章针对如何对op ...

  4. ELK集群模式部署

    架构拓扑图为: 准备工作: 下载资源包: Elasticsearch: wget https://artifacts.elastic.co/downloads/elasticsearch/elasti ...

  5. C++中try_catch_throw的做异常处理

    C++中try_catch_throw的做异常处理 选择异常处理的编程方法的具体原因如下: . 把错误处理和真正的工作分开来: . 代码更易组织,更清晰,复杂的工作任务更容易实现: . 毫无疑问,更安 ...

  6. 二十四种设计模式:备忘录模式(Memento Pattern)

    备忘录模式(Memento Pattern) 介绍在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到保存的状态. 示例有一个Message实体类,某 ...

  7. 解决安卓TextView高度和textSize大小不一致问题

    在设计安卓界面的时候我发现一个TextView在布局上占用的高度和属性textSize的大小不一样,要比textSize要来的大(比如textSize="12dp",实际的高度大概 ...

  8. Ubuntu 13 Zookeeper 集群配置

    一. 目标 在Linux集群搭建Zookeeper集群,并配置管理Web管理系统. 二. 先决条件 本文档中基于VirtualBox Ubuntu Server 13.04 虚机(启动SSH服务器)构 ...

  9. 可视化Tensorboard图中的符号意义

    可视化Tensorboard图中的符号意义

  10. http://my.oschina.net/u/1177710/blog/284608

    http://my.oschina.net/u/1177710/blog/284608 http://chuhanzhi.com/?p=45 http://www.2cto.com/kf/201501 ...