全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
开放搜索

过滤filter子句

更新时间:2017-06-23 10:41:47

子句说明

过滤功能支持用户根据查询条件,筛选出用户感兴趣的文档。会在通过query子句查找到的文档进行进一步的过滤,以返回最终所需结果。

语法说明

过滤条件格式为:filed=value

  • 过滤条件支持>、<、=、<=、>=、!=、in/notin 等常见条件运算符;以及+、-、*、/、&、^、| 等算术运算符;
  • 过滤条件可以配置多个,通过AND、OR及()的逻辑运算关系(必须大写!)进行连接。

注意事项

  1. filter为非必选子句;
  2. 在filter中出现的字段必须在定义应用结构的时候配置为属性字段;
  3. float、double类型因为精度问题无法做精确相等的判断,如有这种场景请,如有这种场景请改用<及>来实现。
  4. literal类型的字段值,在filter子句中必须要加双引号(否者会报6135 常量表达式类型错误),支持所有的关系运算,不支持算术运算。
  5. 排序特征function函数也可以在filter子句中使用;
  6. literal类型字段的过滤仅支持=、!=运算,含义为等于、不等于,不支持>、<等关系运算。(literal字段类型不分词,需要完全匹配)
  7. in/notin 判断字段值是否(不)在指定列表中,只支持INT及FLOAT类型,( 不支持ARRAY及LITERAL、TEXT、模糊分词系列类型 ),详细用法参考 搜索相关性函数 中的描述。
  8. 分词字段类型无法配置为属性,例如 TEXT,SHORT_TEXT等都不支持,只支持数值字段类型及不分词字段类型配置为属性,例如int,int_array,float,float_array,double,double_array,literal,literal_array这些字段类型都支持。

示例

应用中有一个int32字段category,值分别为1(news),2(bbs)等,需要查询分类category为2(bbs)且包含“浙大”的文档:

  1. query=default:'浙大' AND category_search:'2' //category字段创建了一个索引字段category_search
  2. //或者
  3. query=default:'浙大'&&filter=category=2

小说应用中有个string_array字段tags,表示小说风格标签:“宫廷”、“悬疑恐怖”、“言情”,需要查询包含“甄嬛传”且标签包含“宫廷”的文档:

  1. query=default:'甄嬛传'&&filter=tags="宫廷"

电商应用中有个int32的字段hit(点击)和sale(销量),及int64的字段create_time,需要查询包含“连衣裙”且销量与点击的和乘上rate(偏移率)超过10000,创建时间早于1402345600的文档:

  1. query=default:'连衣裙'&&filter=(hit+sale)*rate>10000 AND create_time<1402345600

判断用户是否在商家的配送范围。如商家配送范围的字段为coordinates, 用户位置坐标为 (120.307234, 39.294245),则过滤在配送范围内的商家查询可写为:

  1. query=default:'美食'&&filter=in_polygon(coordinates, 120.307234, 39.294245)>0
本文导读目录