【Open Search產品評測】-來往,7天輕鬆定製屬於本身的搜索引擎

Open Search產品評測】--php

  來往,7天輕鬆定製屬於本身的搜索引擎html


[使用背景]mysql

  相信不少人都遇到過要給網站或者app作一個搜索功能的需求,好久以前本身折騰過lucene,搞了好久,要本身搞中文分詞(好比用中科院的那個)重寫tokenizer,本身建索引,作實時更新流程,數據量大了還要考慮怎樣給數據分環等等各類問題。從2014年初開始接觸opensearch,當時來往要作扎堆搜索(包括搜扎堆,搜帖子,搜某個堆內的帖子,搜堆內成員等)從上手到熟練使用opensearch只用了大概不到1周的時間,整體來講很是滿意。感受這個東西很是符合互聯網創業的節奏,簡單方便,很快的就能實現本身的搜索接口。算法

 

[使用過程]sql

  以創建一個來往的扎堆搜索爲例(若是不知道扎堆是啥,就理解成相似於百度貼吧的東西),好比搜趙薇,咱們能找到趙薇相關的扎堆。我來簡單講述一下怎樣迅速的用opensearch搭建一個搜索接口。數據庫

1. 註冊opensearch的帳號,按操做來就行了。json

2. 建立一個應用,定義索引結構。例如:api

  這裏面可搜索,能夠理解成須要建索引的字段,好比扎堆的名字,扎堆的pinyin名字,扎堆的標籤等。可聚合我這目前沒有使用,先無論這個。可過濾,好比某個字段(checkin_type)表示有的扎堆是私密的,有的不是,那麼須要把checkin_type勾選成可過濾,這樣在檢索的時候能夠寫語句來選取保留哪些符合條件的搜索結果。可展現表示,搜索接口出來咱們要給client顯示哪些字段。網絡


3. 數據導入,opensearch提供了3種數據導入的方式能夠根據應用須要本身選擇。好比從mysql導入,都是圖形化的界面,須要作的只是將mysql中的字段和剛纔創建的索引結構的字段對應起來。也能夠經過hdfs,和sdk還有http的api把數據push過來,sdk和http的api方式很是靈活,具體作法能夠參考幫助文檔講的很清楚[注:mysql\hdfs只有內網支持]app


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幫助使用者解決了搜索功能上不少不少的問題,使得咱們在短期內就能夠很容易的按照本身產品的需求定製出本身的搜索引擎。

 

來往:http://www.laiwang.com/

原文:http://weibo.com/1644971875/Bj0XQhN28?mod=weibotime&type=repost#_rnd1408437347760 

相關文章
相關標籤/搜索