阿里云-開放搜索服務最佳實踐-D_第1頁
阿里云-開放搜索服務最佳實踐-D_第2頁
阿里云-開放搜索服務最佳實踐-D_第3頁
阿里云-開放搜索服務最佳實踐-D_第4頁
阿里云-開放搜索服務最佳實踐-D_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、開放搜索最佳實踐開放搜索/最佳實踐開放搜索/最佳實踐 PAGE 12 PAGE 12最佳實踐功能篇分詞、匹配、相關性、排序表達式針對目前若干用戶遇到的搜索結果與預期不符合的問題進行統(tǒng)一詳細說明,并以此為話題展開說明下opensearch在搜索效果方面的功能和后續(xù)一些工作方向。首先,對于搜索來講,最常見的有兩種做法:數(shù)據(jù)庫的like查詢,可以理解為簡單的包含關系;百度、google等搜索引擎,涉及到分詞,將查詢詞根據(jù)語義切分成若干詞組term(這個是搜索引擎 重難點之一),通過term組合匹配給相應文檔進行打分,根據(jù)分值排序,并最終返回給用戶。opensearch采用的方式與上述搜索引擎做法基本

2、一致。那這里就有三部分內容會影響搜索效果:1,分詞方式;2,匹配方式;3,相關性算分。我們來分別說下這三部分在opensearch上的行為和表現(xiàn)。分詞方式原理分詞會在兩個地方使用:索引構建時:接收到用戶推送文檔后,會根據(jù)用戶定義的應用結構,取出其中為TEXT、字段進行分詞,將對應文檔內容分成若干term(如浙江大學拆分成2個term:浙江和 可搜索的索引字段)構建term到文檔doc的倒排鏈表,用于快 速召回使用;查詢時:將查詢詞進行分詞,按照切完后的term查找倒排鏈,從而找到(召回)包含該term的文檔。 由此可見,這兩部分的分詞方式必須一致,否則會出現(xiàn)對應文檔無法召回的情況。接下來,我們

3、詳細說明下各個字段的展現(xiàn)效果及適用場景,供大家參考。STRING如文檔字段內容為菊花茶,則只有搜索菊花茶的情況下可以召回。不分詞,適合一些需要精確匹配或者只展示不搜索的場景,如標簽、關鍵詞、url等。如文檔字段內容為菊花茶,則只有搜索菊花茶的情況下可以召回。TEXT、MWS_TEXT如文檔字段內容為菊花茶,則搜索菊花茶、菊花、茶、花茶的情況下可以召回。按照檢索單元做分詞,適合有語義的中文搜索場景,如標題、文本等,MWS_TEXT是TEXT的擴展,會召回更多 的內容,建議使用MWS_TEXT。如文檔字段內容為菊花茶,則搜索菊花茶、菊花、茶、花茶的情況下可以召回。SWS_TEXT如文檔字段內容為菊

4、花茶,則搜索菊花茶、菊花、茶、花茶、菊、花、菊茶的情況下可以召回。按照單字/單詞分詞,適合非語義的中文搜索場景,如小說作者名稱、店鋪名等;如文檔字段內容為菊花茶,則搜索菊花茶、菊花、茶、花茶、菊、花、菊茶的情況下可以召回。SHORT_TEXT短文本模糊搜索,支持拼音搜索、數(shù)字的前后綴搜索、單字或者單字母搜索。最多支持100個字節(jié)字段長度如文檔字段內容為菊花茶,則搜索菊花茶、菊花、茶、花茶、菊、花、菊茶、ju、juhua、juhuacha、 j、jh、jhc等情況下可以召回。如文檔字段內容為手機則通過138來搜索以138開頭的手機號,通過5678$搜索以5678結尾的手

5、 如文檔字段內容為菊花茶,則搜索菊花茶、菊花、茶、花茶、菊、花、菊茶、ju、juhua、juhuacha、 j、jh、jhc等情況下可以召回。如文檔字段內容為手機則通過138來搜索以138開頭的手機號,通過5678$搜索以5678結尾的手 機號;如文檔字段內容為OpenSearch,則通過單個字母或者組合都可以檢索到。ENG_TEXT如文檔字段內容為英文分詞器 english analyzer,則搜索英文分詞器、english、analyz、analyzer、analyzers、analyze、analyzed、analyzing。如文檔字段內容為英文分詞器 engl

6、ish analyzer,則搜索英文分詞器、english、analyz、analyzer、analyzers、analyze、analyzed、analyzing。(注意:英文分詞器中連續(xù)的中文會被分成一個詞)NWS_TEXT自定義分詞,適合特殊場景下系統(tǒng)自帶無法解決的搜索場景,可以實現(xiàn)完全用戶控制的效果。推送文檔及搜索 時使用制表符t對字段內容(或查詢詞)進行分隔,注意二者分詞的一致性,否則會導致無法召回文檔的情況。如字段內容為菊t花茶thao,則只有查詢詞菊、花茶、菊t花茶、花茶thao、菊thao、菊t花茶thao可以召 回該文檔。如字段內容為菊t花茶thao,則只有查詢詞菊、花茶、菊

7、t花茶、花茶thao、菊thao、菊t花茶thao可以召 回該文檔。后續(xù)工作1. 增加對小語種的支持,如俄語、葡語、日語等。使用技巧1,在一些召回不好的情況下,可以采用TEXT和SWS_TEXT字段結合的方式來保證搜索效果的同時提高召回率。具體做法為定義兩個相同內容的字段分別為title(TEXT)及sws_title(SWS_TEXT),并分別建立索引字段為title_search 、 sws_title_search 。 則 查 詢 詞 為 query=title_search:keyword OR 在保 證相關性的同時保證召回。匹配方式原理分完詞后得到若干term,如何召回文檔,就涉及到

8、匹配方式。目前opensearch內部默認支持的是AND,即一 篇文檔中包含全部的term才能被搜索出來。當然這是對同一關鍵詞而言的,除此之外系統(tǒng)還支持多種匹配方式,如AND、OR、RANK、NOTAND以及(),優(yōu)先級從高到低為(),ANDNOT,AND,OR,RANK。舉例關系用法含義query=title:蘋果 手機查詢title中包含蘋果和手機的文檔ANDquery=title:蘋果 AND cate:手機交集。查詢title中包含蘋果,且cate包含手機的文檔ORquery=title:蘋果 OR cate:手機并集。查詢title中包含蘋果,或cate包含手機的文檔RANKquer

9、y=title:蘋果 RANK cate:手機查詢title中包含蘋果的文檔,如果cate包含手機則可以加分ANDNOTquery=title:蘋果 ANDNOT cate:手機查詢title中包含蘋果,但cate不包含手機的文檔案例問:我文檔中包含吃飯了,我搜索吃飯、吃飯了都能召回,搜索吃飯了嗎沒結果? 答:因為目前opensearch是要求全部的分詞結果都匹配才能召回文檔,上面的嗎在文檔中沒有出現(xiàn),所以 無法召回。負載均衡/最佳實踐負載均衡/最佳實踐問:我只想查找某些詞排在最前面的文檔,比如以肯德基開頭的文檔; 答:目前不支持位置相關召回。后續(xù)工作我們正在開發(fā)query分析的功能,會對不重

10、要的詞做rank,如案例1中的吃飯了嗎會改寫成吃飯 ANDRANK支持用戶詞典,比如糾錯、同義詞等,可以根據(jù)自己的實際場景挖掘出屬于自己的專屬詞典。O2O實體詞識別,如query=title:杭州市文一西路改寫為query=title:杭州市文一西路 OR (city:310010ANDdistrict:0012ANDtitle:文一西路)。支持下拉提示、相關搜索功能。熱詞統(tǒng)計、點擊反饋等。使用技巧可以通過AND,OR等實現(xiàn)強大的搜索功能。對于一些filter中的過濾字段,如= 、!=的需求,可以盡量使用索引字段來做,可以提高查詢性能。點擊獲取更多優(yōu)化小技巧。相關性算分上面提到的都是跟召回相關

11、的技術,召回文檔之后,究竟文檔如何排序就涉及到相關性。 目前opensearch有則默認為sort=-RANK;sort本身支持多維排序,以及升降 序的支持。比如sort=-RANK;+bonus,意思為第一位按照相關性降序排序,相關性分值一樣的文檔再按照bonus升序排列。 這里我們重點描述下RANK的用法,RANK即為opensearch中的相關性設置,主要分為兩部分:粗排和精排,分別有對應的控制臺中的粗精排表達式配置。原理Opensearch相關性算分策略為,取召回的rank_size(目前是100萬)個文檔按照粗排表達式的定義進行算分;取粗排分最高的N個結果(百級別)按照精排表達式進行

12、算分,并排序;然后根據(jù)start與hit的設置取相應結果 返回給用戶。如果用戶獲取的結果超過了精排結果數(shù)N,則后續(xù)按照粗排分數(shù)排序結果繼續(xù)展現(xiàn)。粗排表達式:從上面原理介紹中可以看出粗排對性能(latency)的影響非常大,但同時粗排又非常 的重要,否則會出現(xiàn)好的文檔無法進入精排而導致文檔不能被最終展現(xiàn)。所以粗排要盡量的簡單有效,目前opensearch的粗排只支持幾個簡單的正排字段、靜態(tài)bm25、時效分等因素。精排表達式:通過粗排表達式篩選出較優(yōu)質的N個文檔進行詳細排序,精排表達式中支持復雜的數(shù)學 計算、邏輯等,并且opensearch提供了豐富的典型場景(如O2O類)的function和fe

13、ature來滿足 日常的相關性需求。同時,系統(tǒng)以內置了多個場景的應用結構和排序表達式,可以供大家參考和使用。場景表達式含義場景表達式含義日志服務/最佳實踐日志服務/最佳實踐論壇-排static_bm25()簡略文本分論壇-精排text_relevance(title)*3+text_r elevance(body)+if(text_relevance(title)0.07, timeliness(create_timestamp),timeliness(create_timestamp)*0.5)+(topped+special+atan(hits)*0.5+atan(replies)*0.1

14、文本分、時效分、其他屬性分O2O-粗排sold_score+general_score*2銷量、門店綜合分值(離線算好)O2O-精排2*sold_score+0.5*reward-10*distance(lon,lat,u_posx,u_ posy)+ if (flags&2) =2, 2, 0)+if(is_open=5,10,0)+ special_score銷量、配送速度及準點率、距離、是否繁忙、是否在營業(yè)時間、人工干預小說-粗排static_bm25()*0.7+hh_hot*0. 00003文本分、熱度小說-精排pow(min(0.5,max(text_releva nce(cate

15、gory),max(text_relev ance(title), text_relevance(author),2)+ general_score*2+ 1.5*(1/(1+pow(2.718281,-(log10(hh_hot)-2)*2-5)分類相關性、標題相關性、作者相關性、小說質量、小說熱度電商-粗排static_bm25()+general_score*2+timeliness(end_time)文本分、寶貝綜合分值、過期時間電商-精排text_relevance(title)*3+text_r elevance(category)+general_score*2+boughtSc

16、or e*2+tag_match(ctr_query_value,d oc_value,mul,sum,false,true)+.文本相關性、類目相關性、寶貝人氣、賣家分、ctr預估、特征規(guī)則分等案例問:精排表達式text_relevance(seller_id)報找不到字段 答:text_relevance()只支持TEXT及SWS_TEXT類型,其他不可以。問:查詢報2112錯誤,是什么問題? 答:查詢語句(query子句)必須與formula相配合,比如query=default:keyword,default中包含title和body字段,而formula指定text_relevanc

17、e(title)+text_relevance(author)則會報錯,因為author在default中不存在。后續(xù)工作優(yōu)化錯誤碼,目前很多查詢錯誤都會報1000錯誤,不利于用戶定位問題,且容易造成系統(tǒng)有問題的 誤導,后續(xù)會統(tǒng)一進行梳理。后續(xù)會對電商類場景提供更多樣的feature來支持,如有類似的需要請聯(lián)系我們。發(fā)布截斷功能,允許用戶指定重要字段,構建索引時考慮該字段的值,降低參與粗排文檔數(shù)、提高參 與精排文檔數(shù),即降低查詢開銷又提高搜索質量,讓更多好的文檔能夠排上來。相關性ABTest調試界面,會在搜索測試頁面增加多個排序表達式的對比界面,將每項表達式的值列 出來,方便用戶進行排序表達式

18、的調整。使用技巧排序表達式的算分是在查詢結算對每個文檔進行計算的,所以如果跟查詢無關的部分的計算可以預先 離線計算好,新增一個general_score字段來存放,排序的時候只要使用general_score字段即可,避免大量計算過程,提高查詢性能。query中的特征與doc中特征做多維運算,在電商場景下有著非常廣 泛的用途,有類似的需求的用戶可以研究下。opensearch提供了豐富的function和feature,使用得當可以獲得非常強大的功能。相關性有很多部分共同組成,各項之間的權重需要根據(jù)搜索排序效果不斷進行調整以達到一個用戶滿 意的搜索效果。ARRAY數(shù)組類型的前世今生本文主要對A

19、rray類型的使用場景、數(shù)據(jù)推送及搜索語法進行系統(tǒng)的介紹,方便大家理解。什么場景下適合使用ARRAY類型?如何推送ARRAY類型的數(shù)據(jù)?目前OpenSearch支持多種方式的數(shù)據(jù)推送方式,那我們就從每個途徑來分開闡述如何進行數(shù)據(jù)推送。API方式fields: id: 0,int_array: 14,85,float_array: 14.0,85.0,string_array: abc,xyz,cmd: ADDARRAY類型需要采用JsonArray的方式來上傳數(shù)據(jù)。 如:fields: id: 0,int_array: 14,85,float_array: 14.0,85.0,string_a

20、rray: abc,xyz,cmd: ADD數(shù)據(jù)集成/數(shù)據(jù)入云數(shù)據(jù)集成/數(shù)據(jù)入云具體數(shù)據(jù)上傳接口請參考API參考手冊-數(shù)據(jù)處理相關SDK方式?php require(php_2.0.4/CloudsearchClient.php); require(php_2.0.4/CloudsearchIndex.php); 應用詳情-API入口,打開debug接口方便調試$client = new CloudsearchClient( ACCESSKEYID,SECRET,array(host=,debug=true), KEY_TYPE);$doc = new CloudsearchDoc(APP_N

21、AME, $client);$json = add($json, 您要推送數(shù)據(jù)的表名);echo $client-getRequest(); #打印發(fā)送的請求串,前提是CloudsearchClient的debug打開?數(shù)據(jù)源方式數(shù)據(jù)源配置允許用戶對于數(shù)據(jù)源數(shù)據(jù)進行多種格式的解析操作,如果定義了ARRAY類型的字段,可以在該字段 上選擇MultiValueSpliter插件,定義好多值分隔符,比如上例中的tags,在數(shù)據(jù)庫表中字段內容為:穿越,懸 疑,言情,那么多值分隔符為英文逗號:,,如圖所示即可。該插件會自動將數(shù)據(jù)庫中字段轉化成為引擎識別 的ARRAY類型。ARRAY類型如何進行檢索?能實

22、現(xiàn)怎樣的效果?query子句,還是filter子句,如上例中的tags字段(內 容為:穿越,懸疑,言情),可以通過query=tags:穿越來找到該文檔;也可以通過query=title:步步驚心相關問題Q: 為什么沒有text_array類型,text與string_array有什么區(qū)別?A: text類型(包含text、sws_text、nws_text、mws_text)涉及到分詞,本身支持的是模糊搜索,所以沒有數(shù)組的概念,而string_array指的是每個元素的精確匹配,很可能這里的單個元素本身是由多個詞組組成的,但是 沒關系要求的是全部匹配。Q: 有沒有方法獲得array類型的元素

23、個數(shù)?A: 系統(tǒng)提供了fieldlen(array_field)的參數(shù),可以獲取元素個數(shù)。SHORT_TEXT模糊搜索模糊搜索是指在用戶搜索意圖不明確時,搜索引擎將用戶的查詢(query)與待檢索的內容(doc)進行模糊匹 配,找出與查詢相關的內容。是否相關主要從兩個方面衡量:一是query是doc中某些內容的全拼或者簡拼;二 是query中內容直接在doc中出現(xiàn)。模糊搜索無法精確理解用戶的查詢意圖,返回的結果中可能包括了一大批用 戶不想要的信息,所以在使用模糊搜索時一定要結合自己的實際場景,慎重使用。適用場景模糊搜索主要用戶搜索意圖不明確或者數(shù)據(jù)較少想返回更多查詢結果的時候。主要包括以下場景

24、。拼音搜索:拼音搜索是指doc中的數(shù)據(jù)為中文,而希望使用全拼或者簡拼進行查詢的搜索。比如,文檔中的內容為開放搜 索,用戶希望查詢kaifangsousuokfss、 kaifangsousuo、k、kf、ss、kfss。注意:如果希望搜索內容在doc中是相連的,建議在查詢詞兩邊加上雙引號。拼音搜索中查詢詞兩邊最好都使用雙引號,這是因為用戶輸入的拼音是 具有一定的意圖的,用戶搜索kfss(開放搜索)其實是希望這些詞是要連在一起的。前綴搜索:前綴搜索是指搜索以指定前綴開頭的內容的檢索,比如手機號碼搜索。模糊搜索支持的前綴標識符為,如果 用戶想搜以138開頭的手機號,query可寫成138(注意是雙

25、引號查詢)。后綴搜索:后綴搜索是指搜索以指定后綴結尾的內容的檢索,比如手機號碼搜索。模糊搜索支持的后綴標識符為$,如果 用戶想搜以9527結尾的手機號,query可以寫成9527$(注意是雙引號查詢)。單字或單字母搜索:模糊搜索支持單字或單字母搜索,比如開放搜索 open search,通過放或者o都可以召回。單字或單字母這種使用場景主要是為了擴大召回結果,返回的結果可能不是很準確。使用與限制用戶創(chuàng)建應用時,將需要進行模糊搜索的字段設置為short_text即可使用模糊搜索。模糊搜索返回的結果默認 按照命中的詞在字段的前后位置進行排序。比如某個應用的title字段需要模糊搜索,doc1的內容為

26、開放搜索容器服務/開發(fā)者工具容器服務/開發(fā)者工具,doc2的內容為喜歡使用開放搜索,當搜索kfss時,doc1默認會排在doc2的前面。 模糊搜索在用于查詢意圖不明確時能夠很好滿足用戶的需求,但在使用過程中需要注意如下限制:模糊搜索中按照空格分隔片段,認為按照空格分開的片段在語義上是等價的,比如對電影的演員進行 拼音搜索,多個演員之間是等價的,需要用空格分開。只有檢索的內容處于同一個片段時,查詢詞兩 邊才可以使用雙引號,否則不建議使用。比如doc的short_textlry或liudehualiuruoying是無法把doc召回的;查詢時只有英文、數(shù)字和拼音支持前綴和后綴搜索,中文不支持;sh

27、ort_text字段中的標點符號會被過濾掉;short_text字段過濾掉標點符號后,長度限制為100個字節(jié),超過的內容會被丟掉;short_text字段可以創(chuàng)建下拉提示;由short_text字段創(chuàng)建的索引不能夠使用查詢分析。性能篇數(shù)據(jù)推送使用API/SDK推送數(shù)據(jù)有次數(shù)及大小限制,具體值請參考系統(tǒng)限制項,推薦將文檔批量打包發(fā)送。數(shù)據(jù)上傳后請務必檢查返回值,并對相關錯誤碼進行重試(尤其是3007錯誤),否則會出現(xiàn)數(shù)據(jù)丟失 情況。同時,數(shù)據(jù)處理是異步的,系統(tǒng)返回OK后只表示系統(tǒng)接收數(shù)據(jù)成功,數(shù)據(jù)處理過程的錯誤會 在控制臺錯誤信息中展示,請注意及時檢查。(更新中沒有出現(xiàn)字段會默認為空)。如果該主

28、鍵 對應文檔已經(jīng)存在,則執(zhí)行先delete再add的操作;(更新中沒有出現(xiàn)字段會仍為原來的值)。 對該主鍵對應文檔進行部分字段更新,如果未存在主鍵文檔,則執(zhí)行add操作;CMD為delete表示刪除文檔,如果該主鍵對應文檔已經(jīng)不存在,則認為刪除成功。(2M以上),服務器將拒絕接收任何參數(shù),同時返 回異常。POST的url及body部分最好都要做url_encode,否則會出現(xiàn)解析及簽名問題。搜索優(yōu)化這里主要介紹在實際查詢過程中可能遇到的各種情況,及可以優(yōu)化的方法。當您發(fā)現(xiàn)自己的搜索效果不滿意或 者不知道該如何實現(xiàn),請聯(lián)系我們。查詢需要帶上索引名(應用結構中的索引到字段),否則將默認取default索引,如果沒有default,則直接報錯無結果。query=mp3相當于query=default:mp3query=mp3相當于query=default:mp3查詢關鍵詞必須帶上單引號,否則將報錯無結果。Error: query=default:mp3 Right: query=default:mp3Error: query=default:mp3 Right: query=default:mp3如果查詢詞中包含,則需要轉義或者去掉;2,查詢詞的最后一個字符不能是,否則會被當成轉義 符從而查詢報錯,如果要搜索,需要對進行轉義。query=default:北京大學,召

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論