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...