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-阿裏雲