python和es簡單互動

2021-10-25 15:57:50 字數 2644 閱讀 1021

from elasticsearch import elasticsearch

def op_es(action, info):

"""這裡大致是乙個增刪改的操作,注意這裡的es的id是info['id'],可以模擬關係型db裡的主鍵,比如是uuid,

如果是將關係型db的資料寫入es,完全可以使用db裡的主鍵充當es的id

:param action: type str,add/delete/edit,類似於我們經常操作關係型資料庫,執行增/刪/改操作

:param info: type dict,類似於db一條記錄,這條記錄在es裡大致叫做doc,info字典裡的每個key叫做field

:return: none

"""es = elasticsearch(hosts=['x.x.x.x']) # 連線es,埠預設9200

es_index = 'xx-index' # 即將操作的es index

if action == 'delete':

es.delete(index=es_index, id=info['id']) # 刪除該索引中這個id對應的doc

return none

body =

if action == 'add':

es.create(index=es_index, id=info['id'], body=body) # 在該索引下建立乙個新的doc

elif action == 'edit':

es.update(index=es_index, id=info['id'], body=) # 更新已有的某個doc

def query_es(query_string):

es = elasticsearch(hosts=['x.x.x.x'])

es_index = 'xx-index'

# filter: 詢結果裡能夠看到score都是0,速度要快些

query = es.search(index=es_index, body=}],

}}, 'size': 20})

# query: 查詢結果裡能夠看到score計算值,速度要慢些,但是具體還是看資料量以及具體查詢dsl的語法

query = es.search(index=es_index, body=

}, 'size': 20})

return

一些說明和可能需要了解的東西

有時間的話可以看下官方文件

如果時間不多,也可以開啟這個文件,看下每個目錄下面的overview簡單地了解下

dsl查詢:es查詢方式之一,結構化查詢,使用json請求體,直觀簡易,使用率高。

(新版本有個eql,處於beta階段,**不如dsl成熟,但是也是提供的,使用不提供任何擔保)

elasticsearch dsl中有query與filter兩種

(1)query方式查詢,會在es中索引的資料中儲存乙個_score分值,分值越高

就代表越匹配。注意搜尋的分值計算還是很複雜的(根據lucene的評分機制(tf/idf)來

進行評分),因此也需要一定的時間開銷

(2)filter過濾器方式查詢,它的查詢不會計算相關性分值,也不會對結果

進行排序, 因此效率會高一點,查詢的結果可以被快取

參考:es查詢

(1)term:term查詢不會對欄位進行分詞查詢且精確匹配,查詢字段對映型別屬於為keyword

參考:(2)match:根據備註資訊模糊查詢 match,match會根據該字段的分詞器,進行分詞查詢

參考:(3)multi_match:多欄位模糊匹配查詢

參考:(4)match_phrase:同時包含、存在可調節因子slop

參考:(5)best_fields:希望完全匹配的文件佔的評分比較高

(6)範圍查詢:比如事件段切割gte、lte、format等

(8)布林查詢:

must: 文件必須完全匹配條件

should: should下面會帶乙個以上的條件,至少滿足乙個條件,這個文件就符合should

must_not: 文件必須不匹配條件

es的scroll查詢(或游標查詢)類似一種深度分頁機制,預設10000,python es外掛程式預設10(需在dsl裡不從size)

可以針對大批量的文件進行查詢,而又不用付出深度分頁那種代價。即取某個時間點的快照資料。

啟用游標查詢:查詢的時候設定引數 scroll 的值為我們期望的游標查詢的過期時間,

游標查詢的過期時間會在每次做查詢的時候重新整理,所以這個時間只需要足夠處理當前批的結果就可以了。

保持這個游標查詢視窗需要消耗資源,資料處理完畢後盡量早些釋放。

scroll=1m, 保持游標查詢視窗一分鐘。

注意:注意游標查詢每次返回乙個新字段 _scroll_id。每次我們做下一次游標查詢,

我們必須把前一次查詢返回的字段 _scroll_id 傳遞進去。 當沒有更多的結果返回的時候,

我們就處理完所有匹配的文件了。

tf-idf

tf(term frequency,tf):指的是某乙個給定的詞語在該檔案**現的頻率

idf(inverse document frequency,idf):逆向檔案頻率是乙個詞語普遍重要性的度量

計算公式參考:

Lost Numbers 簡單互動

題意 互動式題目 要求通過最多四次詢問確定出來乙個序列 這個序列只含6個元素,4 8,15,16,23,42,每個元素只會出現一次 詢問的格式是 l r 返回值為這個序列l位置與r位置的元素乘積 思路 我的思路是每次都是相同的四個詢問 1 1 1 2 3 5 4 5 前兩個詢問可以確定1,2兩個元素...

Lua 與 C 的簡單互動

test.cpp 定義控制台應用程式的入口點。include stdafx.h extern c static int print lua state l lua state l int luaadd int x,int y int tmain int argc,tchar argv lua ini...

android客戶端和php服務簡單互動

android客戶端和php mysql apache搭建的伺服器之間的簡單互動,實現登入功能。實現原理就是android客戶端傳送請求,傳給伺服器登入的使用者名稱密碼,伺服器收到這些,連線到資料庫查詢,如果使用者名稱和密碼匹配正確,就輸出字串返回給客戶端。伺服器端 先在mysql裡面建乙個test...