621
微信
solr语法转化__功能篇_最佳实践_开放搜索-阿里云
Schema
OpenSearch支持多种数据类型及分词方式,可以满足绝大多数场景下的需求。目前接触到的不满足的有:
- 目前支持的类型:INT、FLOAT、DOUBLE、LITERAL及其各自的ARRAY类型、TEXT、SHORT_TEXT;
- DynamicField:暂不支持,OpenSearch支持修改应用结构,可以先通过动态修改的方式来绕过;
- CopyField:暂不支持,可以离线预先合并。
- 字段个数限制:256。超过限制的业务可以考虑将非区间段查询(精准匹配)的若干字段利用ARRAY类型合并成一个字段,来减少总字段个数的方式绕过。
- patternTokenizer:目前OpenSearch支持自定义分词,但是分隔符默认为t,需要将原有分隔符转化为t即可。
- location:转化为两个字段float或者double字段,分别用来存储经纬度值。
- bool:转化为INT型,值为0/1。
- date:转化为INT型,数据库源会自动转成毫秒时间戳,API推送的需要手动转化;
- payload analyzer:暂不支持。
- bitwise分词:暂不支持。
- 庖丁分词:使用OpenSearch中文基础分词。
搜索语法
OpenSearch目前支持查询、过滤、统计、聚合、排序等功能,详细功能说明。
- q:必选参数,相当于OpenSearch中query查询,具体转化规则如下:
q 转化规则 |
---|
‘:‘ 暂不支持 |
range索引,用filter的区间段来转化 |
+A ==> A |
-A ==> 不支持 |
A AND B ==> A AND B |
A AND -B ==> A ANDNOT B |
A OR B ==> A OR B |
A OR +B ==> A RANK B |
A AND B OR C ==> A AND B RANK C, e.g:红富士 AND 苹果 OR 山东 |
A OR B AND C ==> B AND C RANK A, e.g:红富士 OR 苹果 AND 山东 |
A AND B OR +C ==> A AND B AND C, e.g:红富士 AND 苹果 OR +山东 |
A OR +B AND C ==> B AND C RANK A, e.g:红富士 OR +苹果 AND 山东 |
+A OR B AND C ==> A AND B AND C, e.g:+红富士 OR 苹果 AND 山东 |
A AND B OR -C ==> (A AND B) ANDNOT C, e.g:红富士 AND 苹果 OR -山东 |
A AND -B OR C ==> A ANDNOT B RANK C, e.g:苹果 AND -红富士 OR 山东 |
-A AND B OR C ==> B ANDNOT A RANK C, e.g:-红富士 AND 苹果 OR 山东 |
A OR B AND -C ==> B ANDNOT C RANK A, e.g:红富士 OR 苹果 AND -山东 |
A OR -B AND C ==> C ANDNOT B RANK A, e.g:红富士 OR -山东 AND 苹果 |
-A OR B AND C ==> (B AND C) ANDNOT A, e.g:-红富士 OR 山东 AND 苹果 |
A OR B OR -C == A OR -C OR B == -C OR A OR B ==> (A OR B) ANDNOT C |
A AND B OR C AND D ==> A AND B AND C AND D |
- fq:用来过滤,只影响召回不影响算分。非模糊查询使用filter,模糊查询走query,排序的时候不要考虑该字段即可;
- fl:使用OpenSearch fetch_fields参数来定义返回值;
- hl:在控制台上配置结果摘要和飘红;
- start,rows: config 子句中的start和hit;
- wt:config子句中的format;
- df:查询的默认字段;
- sort:filed desc => -filed;field asc=> +field;score=>sort=RANK;
- facet:字段必须配置索引属性。
统计转化规则 |
---|
facet.field => OpenSearch aggregate子句中的group_key参数 |
facet.limit => OpenSearch aggregate子句中的max_group,默认为1000 |
facet.mincount => 暂不支持,需要全部结果拿回去自行处理 |
facet.offset => 暂不支持,需要全部结果拿回去自行翻页 |
facet.sort => 暂不支持,需要全部结果拿回去自行排序 |
facet=true&facet.field=price&facet.limit=200 ==> aggregate=group_key:price,agg_fun:count(),max_group:200 |
- group:暂不支持。某些简单的场景可以考虑OpenSearch中的distinct子句,并结合sort来做组内排序。
- stats:部分功能对应OpenSearch中的aggregate子句,但是agg_func仅支持min, max, count, avg,暂不支持missing、sumOfSquares、mean、stddev、distinctValue、countDistinct。
搜索功能
- 深度翻页:目前OpenSearch提供两个查询接口,一个是search,一个是scroll。search是常规的查询场景,最多支持5000个结果返回,可以翻页,每页最大500个;scroll为数据导出场景,可以支持千万级别数据导出,但不支持排序,可以将结果拿回去做二次分析。
- 统计结果准确性:为了保证更优的检索性能,目前OpenSearch在很多情况下会做抽样和预估,这样会导致统计结果不是很精准。
- 搜索结果total值:为了保证搜索性能,数据量很大的情况下(跟总数据量无关,主要是查询召回量超过百万以上),仍然会做预估。
- 多OR查询:目前query长度限制编码后1K,如果OR查询较多会导致报错无结果,建议增加个数限制,或者并发多次查询再自行做结果merge。
最后更新:2016-11-23 17:16:10
上一篇:
模糊搜索详解__功能篇_最佳实践_开放搜索-阿里云
下一篇:
数据推送__性能篇_最佳实践_开放搜索-阿里云
制作报表-门户__制作报表_Quick BI-阿里云
Logstash接入Windows平台日志__logtail(Agent)_用户指南_日志服务-阿里云
使用前须知__快速入门(MySQL)_云数据库 RDS 版-阿里云
实例内不同数据库之间的数据迁移__最佳实践_数据传输-阿里云
DRDSWriter__Writer插件_使用手册_数据集成-阿里云
OSS转储授权__快速入门_归档存储-阿里云
使用说明__服务管理_用户指南_容器服务-阿里云
GetObjectACL__关于Object操作_API 参考_对象存储 OSS-阿里云
查询返回码__资源监控接口_API 手册_CDN-阿里云
管道___老版图片服务手册_对象存储 OSS-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云