您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“opensearch Search使用實例分析”,內容詳細,步驟清晰,細節處理妥當,希望這篇“opensearch Search使用實例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
[使用背景]
相信很多人都遇到過要給網站或者app做一個搜索功能的需求,很久之前自己折騰過lucene,搞了很久,要自己搞中文分詞(比如用中科院的那個)重寫tokenizer,自己建索引,做實時更新流程,數據量大了還要考慮怎樣給數據分環等等各種問題。從2014年初開始接觸opensearch,當時來往要做扎堆搜索(包括搜扎堆,搜帖子,搜某個堆內的帖子,搜堆內成員等)從上手到熟練使用opensearch只用了大概不到1周的時間,總體來說非常滿意。感覺這個東西非常符合互聯網創業的節奏,簡單方便,很快的就能實現自己的搜索接口。
[使用過程]
以建立一個來往的扎堆搜索為例(如果不知道扎堆是啥,就理解成類似于百度貼吧的東西),比如搜趙薇,我們能找到趙薇相關的扎堆。我來簡單講述一下怎樣迅速的用opensearch搭建一個搜索接口。
1. 注冊opensearch的賬號,按操作來就好了。
2. 創建一個應用,定義索引結構。例如:
這里面可搜索,可以理解成需要建索引的字段,比如扎堆的名字,扎堆的pinyin名字,扎堆的標簽等。可聚合我這目前沒有使用,先不管這個。可過濾,比如某個字段(checkin_type)表示有的扎堆是私密的,有的不是,那么需要把checkin_type勾選成可過濾,這樣在檢索的時候可以寫語句來選取保留哪些符合條件的搜索結果。可展示表示,搜索接口出來我們要給client顯示哪些字段。
3. 數據導入,opensearch提供了3種數據導入的方式可以根據應用需要自己選擇。比如從mysql導入,都是圖形化的界面,需要做的只是將mysql中的字段和剛才建立的索引結構的字段對應起來。也可以通過hdfs,和sdk還有http的api把數據push過來,sdk和http的api方式非常靈活,具體做法可以參考幫助文檔講的很清楚。[注:mysql\hdfs只有內網支持]
4. 建立索引,在界面里點擊數據導入這個tab,會有索引重建這塊,點擊現在重建,opensearch會從剛才我們配置的數據庫里,按照配置的字段對應方式,從數據庫里讀出數據并建立索引。等待這個過程結束,就可以訪問搜索接口了。
5. 訪問搜索接口,在應用首頁的右上角點搜索測試。
如圖中有http的接口,訪問后返回的是json格式的搜索結果數據。這樣最簡單的一個搜索雛形就這樣搭建出來了。
[使用技巧]
下邊說一些可能會遇到的需求和問題:
1. 比如遇到排序需求,例如需要A字段命中比B字段的命中要更重要,即A字段匹配的好的要排在前面(比如title和content)。這樣可以自定義排序公式,可以參考文檔這里給了很多排序函數,比如可以用bm25算法算靜態分,text_relevance算和某個字段的匹配程度,fieldterm_proximity計算匹配的密度,也有按時間字段衰減的函數。
2. 比如遇到一些召回方面的需求,例如搜zhoujielun希望可以搜出周杰倫,搜明星可以出所有明星相關的文檔(并不一定包含明星兩個字),可能通常比較大的搜索引擎通過query refine和query correct這種類似的模塊來分析query來擴大召回,這里可以稍微投機一下,我們把確定的希望召回的term可以做成一個新的字段放到索引結構里,并給這些字段一個排序的權重來做到召回并可以合適的排序。
3. 比如遇到搜索附近的事物的需求,排序函數里提供了一個distance函數,是算球面距離的,這個方法是o(n)的,如果數據多了,可能效率會有影響。我們可以在索引結構里做一個字段,用geohash算法(此算法參考http://en.wikipedia.org/wiki/Geohash)將query里的二維坐標變成一些前綴相同的字符串(比如我們可以固定留5,6,7,8位的),把這些geohash后的字符串放到這個新的索引字段里。檢索的時候也同樣把輸入的二維坐標算出5,6,7,8位的geohash串,在這些串能索引到的數據里用distance函數進行更精準的距離計算并排序,可以很高效的完成附近的事物的搜索。
4. 另外數據量這塊,目前數據量最大的索引約有5000w個doc,這個狀況下在qps500的時候依然可以做到10ms以內返回搜索結果(當然搜索結果的每個doc的可展示字段不要太大,這樣響應時間會因為網絡傳輸數據變的慢一些)。
[需求]
1. 還有發現一些查詢的badcase,在query分析和結果的求交求并這塊還是有些badcase的,例如假如我們搜 "周杰倫中學照片",按照重要程度感覺上是周杰倫>>中學=照片,即使沒有全命中的文章,那么也應該召回周杰倫照片或者 周杰倫的文檔。相信這塊會越做越好的。
OpenSearch解答:目前正在開發一個新功能,會對用戶query做多個維度的改寫,比如低權重term降權,支持用戶自定義詞典(同義詞、糾錯、停用詞、專業詞等),會進一步提升長尾詞的搜索效果,降低無結果率。
2. 如果能提供相關搜索功能就更好了:). 比如根據這個搜索應用經常搜的一些query的log,給出搜這個query的用戶還可能搜什么詞兒。
OpenSearch解答:相關搜索、下拉提示等功能都已經在規劃中,包括后續的點擊反饋、個性化搜索我們都已經開始調研工作了,敬請期待。
讀到這里,這篇“opensearch Search使用實例分析”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。