溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

opensearch Search使用實(shí)例分析

發(fā)布時(shí)間:2022-01-07 15:15:49 來源:億速云 閱讀:343 作者:iii 欄目:云計(jì)算

本文小編為大家詳細(xì)介紹“opensearch Search使用實(shí)例分析”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“opensearch Search使用實(shí)例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

[使用背景]

  相信很多人都遇到過要給網(wǎng)站或者app做一個(gè)搜索功能的需求,很久之前自己折騰過lucene,搞了很久,要自己搞中文分詞(比如用中科院的那個(gè))重寫tokenizer,自己建索引,做實(shí)時(shí)更新流程,數(shù)據(jù)量大了還要考慮怎樣給數(shù)據(jù)分環(huán)等等各種問題。從2014年初開始接觸opensearch,當(dāng)時(shí)來往要做扎堆搜索(包括搜扎堆,搜帖子,搜某個(gè)堆內(nèi)的帖子,搜堆內(nèi)成員等)從上手到熟練使用opensearch只用了大概不到1周的時(shí)間,總體來說非常滿意。感覺這個(gè)東西非常符合互聯(lián)網(wǎng)創(chuàng)業(yè)的節(jié)奏,簡(jiǎn)單方便,很快的就能實(shí)現(xiàn)自己的搜索接口。

[使用過程]

  以建立一個(gè)來往的扎堆搜索為例(如果不知道扎堆是啥,就理解成類似于百度貼吧的東西),比如搜趙薇,我們能找到趙薇相關(guān)的扎堆。我來簡(jiǎn)單講述一下怎樣迅速的用opensearch搭建一個(gè)搜索接口。

1. 注冊(cè)opensearch的賬號(hào),按操作來就好了。

2. 創(chuàng)建一個(gè)應(yīng)用,定義索引結(jié)構(gòu)。例如:

opensearch Search使用實(shí)例分析

  這里面可搜索,可以理解成需要建索引的字段,比如扎堆的名字,扎堆的pinyin名字,扎堆的標(biāo)簽等??删酆衔疫@目前沒有使用,先不管這個(gè)。可過濾,比如某個(gè)字段(checkin_type)表示有的扎堆是私密的,有的不是,那么需要把checkin_type勾選成可過濾,這樣在檢索的時(shí)候可以寫語句來選取保留哪些符合條件的搜索結(jié)果??烧故颈硎?,搜索接口出來我們要給client顯示哪些字段。

3. 數(shù)據(jù)導(dǎo)入,opensearch提供了3種數(shù)據(jù)導(dǎo)入的方式可以根據(jù)應(yīng)用需要自己選擇。比如從mysql導(dǎo)入,都是圖形化的界面,需要做的只是將mysql中的字段和剛才建立的索引結(jié)構(gòu)的字段對(duì)應(yīng)起來。也可以通過hdfs,和sdk還有http的api把數(shù)據(jù)push過來,sdk和http的api方式非常靈活,具體做法可以參考幫助文檔講的很清楚。[注:mysql\hdfs只有內(nèi)網(wǎng)支持]

4. 建立索引,在界面里點(diǎn)擊數(shù)據(jù)導(dǎo)入這個(gè)tab,會(huì)有索引重建這塊,點(diǎn)擊現(xiàn)在重建,opensearch會(huì)從剛才我們配置的數(shù)據(jù)庫里,按照配置的字段對(duì)應(yīng)方式,從數(shù)據(jù)庫里讀出數(shù)據(jù)并建立索引。等待這個(gè)過程結(jié)束,就可以訪問搜索接口了。

5. 訪問搜索接口,在應(yīng)用首頁的右上角點(diǎn)搜索測(cè)試。

opensearch Search使用實(shí)例分析

如圖中有http的接口,訪問后返回的是json格式的搜索結(jié)果數(shù)據(jù)。這樣最簡(jiǎn)單的一個(gè)搜索雛形就這樣搭建出來了。

[使用技巧]

下邊說一些可能會(huì)遇到的需求和問題:

1. 比如遇到排序需求,例如需要A字段命中比B字段的命中要更重要,即A字段匹配的好的要排在前面(比如title和content)。這樣可以自定義排序公式,可以參考文檔這里給了很多排序函數(shù),比如可以用bm25算法算靜態(tài)分,text_relevance算和某個(gè)字段的匹配程度,fieldterm_proximity計(jì)算匹配的密度,也有按時(shí)間字段衰減的函數(shù)。

2. 比如遇到一些召回方面的需求,例如搜zhoujielun希望可以搜出周杰倫,搜明星可以出所有明星相關(guān)的文檔(并不一定包含明星兩個(gè)字),可能通常比較大的搜索引擎通過query refine和query correct這種類似的模塊來分析query來擴(kuò)大召回,這里可以稍微投機(jī)一下,我們把確定的希望召回的term可以做成一個(gè)新的字段放到索引結(jié)構(gòu)里,并給這些字段一個(gè)排序的權(quán)重來做到召回并可以合適的排序。

3. 比如遇到搜索附近的事物的需求,排序函數(shù)里提供了一個(gè)distance函數(shù),是算球面距離的,這個(gè)方法是o(n)的,如果數(shù)據(jù)多了,可能效率會(huì)有影響。我們可以在索引結(jié)構(gòu)里做一個(gè)字段,用geohash算法(此算法參考http://en.wikipedia.org/wiki/Geohash)將query里的二維坐標(biāo)變成一些前綴相同的字符串(比如我們可以固定留5,6,7,8位的),把這些geohash后的字符串放到這個(gè)新的索引字段里。檢索的時(shí)候也同樣把輸入的二維坐標(biāo)算出5,6,7,8位的geohash串,在這些串能索引到的數(shù)據(jù)里用distance函數(shù)進(jìn)行更精準(zhǔn)的距離計(jì)算并排序,可以很高效的完成附近的事物的搜索。

4. 另外數(shù)據(jù)量這塊,目前數(shù)據(jù)量最大的索引約有5000w個(gè)doc,這個(gè)狀況下在qps500的時(shí)候依然可以做到10ms以內(nèi)返回搜索結(jié)果(當(dāng)然搜索結(jié)果的每個(gè)doc的可展示字段不要太大,這樣響應(yīng)時(shí)間會(huì)因?yàn)榫W(wǎng)絡(luò)傳輸數(shù)據(jù)變的慢一些)。

[需求]

1. 還有發(fā)現(xiàn)一些查詢的badcase,在query分析和結(jié)果的求交求并這塊還是有些badcase的,例如假如我們搜 "周杰倫中學(xué)照片",按照重要程度感覺上是周杰倫>>中學(xué)=照片,即使沒有全命中的文章,那么也應(yīng)該召回周杰倫照片或者 周杰倫的文檔。相信這塊會(huì)越做越好的。

OpenSearch解答:目前正在開發(fā)一個(gè)新功能,會(huì)對(duì)用戶query做多個(gè)維度的改寫,比如低權(quán)重term降權(quán),支持用戶自定義詞典(同義詞、糾錯(cuò)、停用詞、專業(yè)詞等),會(huì)進(jìn)一步提升長(zhǎng)尾詞的搜索效果,降低無結(jié)果率。

2. 如果能提供相關(guān)搜索功能就更好了:). 比如根據(jù)這個(gè)搜索應(yīng)用經(jīng)常搜的一些query的log,給出搜這個(gè)query的用戶還可能搜什么詞兒。

OpenSearch解答:相關(guān)搜索、下拉提示等功能都已經(jīng)在規(guī)劃中,包括后續(xù)的點(diǎn)擊反饋、個(gè)性化搜索我們都已經(jīng)開始調(diào)研工作了,敬請(qǐng)期待。

讀到這里,這篇“opensearch Search使用實(shí)例分析”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI