怎么學(xué)python
建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計技術(shù)配合操作的協(xié)同工作。成都創(chuàng)新互聯(lián)專業(yè)提供成都網(wǎng)站建設(shè)、做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站設(shè)計、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!
俗話說得好,“摩天大樓從地起”,學(xué)習(xí)任何編程語言都一定要把該語言的基礎(chǔ)打牢,而怎么打地基呢?秘訣只有一條:多敲代碼多敲代碼多敲代碼。學(xué)習(xí)前期建議找一本講python基礎(chǔ)的書或博客,把里面的例題跟著操作一遍,在基礎(chǔ)打扎實(shí)后,可上一些比較出名的競賽項(xiàng)目的網(wǎng)站如kaggle等,通過做項(xiàng)目去鞏固知識。
推薦書籍:《Python基礎(chǔ)教程(第3版)》Magnus Lie Hetland著
推薦理由:全面介紹了Python的基礎(chǔ)知識、基本概念,高級主題,還有Python程序測試、打包、發(fā)布等知識,及10個具有實(shí)際意義的Python項(xiàng)目的開發(fā)過程,涉及的范圍較廣,既能為初學(xué)者夯實(shí)基礎(chǔ),又能幫助程序員提升技能,適合各個層次的Python開發(fā)人員閱讀參考。
基礎(chǔ)知識
代碼規(guī)范
1. 縮進(jìn)
相比于其他語言用大括號和end來標(biāo)識代碼塊,python語言比較“獨(dú)特”,其通過代碼的縮進(jìn)來標(biāo)識所屬代碼塊,通常4個空格為一個縮進(jìn),可用tab鍵實(shí)現(xiàn)。縮進(jìn)是python代碼的重要組成部分,若你的代碼縮進(jìn)格式不正確,如同一段代碼塊語句縮進(jìn)不一致,首句未頂格等,都會運(yùn)行出錯。
#一個完整的語句首句要頂格
i=0
#同一代碼塊的語句應(yīng)縮進(jìn)一致
for i in range(5):
print(i)
i+=1
2. 注釋
編程語言的注釋,即對代碼的解釋和說明。給代碼加上注釋,可提高代碼的可讀性,當(dāng)你閱讀一段他人寫的代碼時,通過注釋迅速掌握代碼的大致意思,讀起代碼將更加得心應(yīng)手。
python語言的注釋分為單行注釋和多行注釋,在注釋符后的內(nèi)容計算機(jī)會自動跳過不去執(zhí)行。
單行注釋:在需注釋語句前加“#”,可在代碼后使用,也可另起一行使用
i=1 #在代碼后使用注釋
#另起一行使用注釋
多行注釋:在語句開頭和結(jié)尾處加三個單引號或三個雙引號(前后須一致)
'''
使用單引號的多行注釋
'''
"""
使用雙引號的多行注釋
"""
使用注釋除了起到望文生義,迅速了解代碼意思的作用外,還有一個小妙處,可以將某段未完成或需要修改的代碼隱蔽起來,暫時不讓計算機(jī)執(zhí)行。
3. 多行語句
python中默認(rèn)以行結(jié)束作為代碼結(jié)束的標(biāo)記,而有時候?yàn)榱碎喿x方便,我們需要將一個完整代碼跨行表示,這時候我們可以使用續(xù)行符:反斜杠“\”來將一行語句分為多行顯示:
score = eng_score + \
math_score + \
his_score
注意:若語句中使用大括號{}、中括號[]或小括號()將數(shù)據(jù)括起來,則不需要使用續(xù)行符,如下所示:
name=['Ada','Ailsa','Amy',
'Barbara','Betty','Blanche'
'Carina','Carrie','Carry'
'Daisy','Darcy','Diana']
什么是算法
在學(xué)習(xí)使用python之前,要先明確使用python的目的是什么?作為一名數(shù)據(jù)分析工作者,我們并不需要使用python語言來設(shè)計程序,只需要使用python來完成算法的實(shí)現(xiàn)。那么算法又是什么呢?
算法是指解決某項(xiàng)問題的流程或步驟,我們可以用一個很貼近生活的例子去理解,假如你需要做一道“西紅柿炒雞蛋”,根據(jù)菜譜:先準(zhǔn)備食材,然后下油熱鍋,將西紅柿倒進(jìn)去翻炒后,加入蛋液翻炒至熟。
這就是我們完成“西紅柿炒雞蛋”這道菜所用的“算法”,而完成這個算法所需要的就是原料和操作說明,下面來看看原料和說明是什么。
變量
Python語言中的“原料”即對象,在python里萬物皆對象,而對象通過引用變量唯一存在,引用上面的例子,可以將”雞蛋”理解為”對象”,而給它取的名字”小紅家雞生的蛋”則是”變量”。
變量的概念想必大家不會陌生,和中學(xué)方程中學(xué)的變量基本上是一致的.變量可以理解為對事物的一個代號或者貼的一個標(biāo)簽,是一個可重復(fù)使用的量;而不同于方程中的變量,編程語言中的變量不僅僅是數(shù)值型, 還可以是字符型、邏輯型等其他數(shù)據(jù)類型。
1. 變量的性質(zhì)
先定義后使用在python中引用變量需要先定義,否則會報錯,但與其他編程語言如C語言不同,python定義變量不需要事先定義變量類型,變量類型隨變量所賦值的類型決定可重復(fù)賦值及運(yùn)算在python中變量可以重復(fù)賦值使用,變量間也可相互賦值,同時可以對變量進(jìn)行運(yùn)算操作#變量可重復(fù)賦值
i=2
i=3
#可對變量做運(yùn)算
i+1
#查看變量的數(shù)據(jù)類型
type(a)
2. 變量的命名規(guī)則
只能包含:數(shù)字、字母、下劃線不能以數(shù)字開頭,不能包含python保留字、關(guān)鍵字、函數(shù)名慎用小寫字母l和大寫字母O, 避免與數(shù)字1和0混淆建議用駝峰命名法,即以單詞加“"命名,如:studentname#查看python有哪些保留字
import keyword
print(keyword.kwlist)
3. 變量的賦值
基本賦值在python中,我們使用“=”對變量進(jìn)行賦值,如“x=3"。這里要注意,數(shù)據(jù)和變量是分開存儲的,即在內(nèi)存中先建立數(shù)據(jù)“3”,然后建立一個標(biāo)記“x”,再將x指向內(nèi)存中的值。若重新對變量x賦值為“2”,實(shí)質(zhì)上是修改了數(shù)據(jù)的引用,變量x重新指向內(nèi)存中的數(shù)據(jù)“2”。
多重賦值對同一對象可以引用多個變量,例如一個人可以有多重身份,Mr Li 是一位父親,同時也是一位教師,不同的變量,實(shí)質(zhì)指向的對象是同一事物。father = teacher = 'Mr Li'
多元賦值對多個變量同時賦值,等號兩邊可加括號可不加a,b,c=1,2,3
(a,b,c)=(1,2,3)
語句
了解完算法中的“原料”,我們再來看看算法中的“操作說明”是什么呢?算法中的“操作說明”可以說是算法的“靈魂”,就好像一道菜完成的作品如何,很大程度取決于廚師的廚藝(即做菜秘籍)。構(gòu)成算法“操作步驟”的是語句,其中包含python的基本語句和控制流程語句。控制流程語句的語法相對較復(fù)雜,在后面的文章再繼續(xù)介紹,我們先認(rèn)識一下python的基本語句:
其實(shí)前面我們已經(jīng)接觸過python的基礎(chǔ)語句:賦值語句,賦值語句較簡單不展開介紹,下面主要介紹python另一個使用特別廣泛的基礎(chǔ)語句:輸出與輸入語句。
1. 輸出語句
python中輸出值的方式主要有兩種:表達(dá)式和print( )函數(shù),兩者的區(qū)別在于,表達(dá)式輸出的結(jié)果為一個python對象,而在實(shí)際運(yùn)用中,為方便閱讀,通常需要按照一定格式輸出結(jié)果,print( )函數(shù)就很好地解決此問題。
print( )語法:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
print( )參數(shù):
objects -- 復(fù)數(shù),表示可以一次輸出多個對象。輸出多個對象時,需要用 , 分隔。sep -- 用來間隔多個對象,默認(rèn)值是一個空格。end -- 用來設(shè)定以什么結(jié)尾。默認(rèn)值是換行符 “\n”,可換成其他字符串。file -- 要寫入的文件對象。flush -- 輸出是否被緩存通常決定于 file,但如果 flush 關(guān)鍵字參數(shù)為 True,流會被強(qiáng)制刷新。#打印多個值,設(shè)置中間分隔符為“-”
print("廣州","上海","深圳",sep="-")
#先以默認(rèn)結(jié)尾符"\n"輸出,再以結(jié)尾符設(shè)置為“-”,注意區(qū)別二者區(qū)別
print("廣州")
print("上海")
print("深圳")
print("廣州",end="-")
print("上海",end="-")
print("深圳",end="-")
以上代碼實(shí)行結(jié)果為:
2. 輸入語句
在python中獲取鍵盤輸入數(shù)據(jù)的函數(shù)是input()函數(shù),input函數(shù)會自動將輸入的數(shù)據(jù)轉(zhuǎn)為字符串類型,并自動忽略換行符,同時可給出提示字符串。如果需要得到其他類型的數(shù)據(jù),可對其進(jìn)行強(qiáng)制性類型轉(zhuǎn)換。
input( )語法:
input([prompt])
input( )參數(shù):
prompt: 給輸入者的提示信息,可選參數(shù)age=input("請輸入您的年齡:")
或如何了解缺少哪些官方文件
如果我不得不用一個短語來描述Elasticsearch,我會說:
目前,Elasticsearch在十大最受歡迎的開源技術(shù)中。 公平地說,它結(jié)合了許多本身并不獨(dú)特的關(guān)鍵功能,但是,當(dāng)結(jié)合使用時,它可以成為最佳的搜索引擎/分析平臺。
更準(zhǔn)確地說,由于以下功能的結(jié)合,Elasticsearch變得如此流行:
· 搜索相關(guān)性評分
· 全文搜索
· 分析(匯總)
· 無模式(對數(shù)據(jù)模式無限制),NoSQL,面向文檔
· 豐富的數(shù)據(jù)類型選擇
· 水平可擴(kuò)展
· 容錯的
通過與Elasticsearch進(jìn)行合作,我很快意識到,官方文檔看起來更像是所謂文檔的"擠壓"。 我不得不在Google上四處搜尋,并且大量使用stackowerflow,所以我決定編譯這篇文章中的所有信息。
在本文中,我將主要撰寫有關(guān)查詢/搜索Elasticsearch集群的文章。 您可以通過多種不同的方式來實(shí)現(xiàn)大致相同的結(jié)果,因此,我將嘗試說明每種方法的利弊。
更重要的是,我將向您介紹兩個重要的概念-查詢和過濾器上下文-在文檔中沒有很好地解釋。 我將為您提供一組規(guī)則,以決定何時使用哪種方法更好。
在閱讀本文后,如果我只想讓您記住一件事,那就是:
當(dāng)我們談?wù)揈lasticsearch時,總會有一個相關(guān)性分?jǐn)?shù)。 相關(guān)性分?jǐn)?shù)是嚴(yán)格的正浮點(diǎn)數(shù),表示每個文檔滿足搜索標(biāo)準(zhǔn)的程度。 該分?jǐn)?shù)是相對于分配的最高分?jǐn)?shù)的,因此,分?jǐn)?shù)越高,文檔與搜索條件的相關(guān)性越好。
但是,過濾器和查詢是您在編寫查詢之前應(yīng)該能夠理解的兩個不同概念。
一般來說,過濾器上下文是一個"是/否"選項(xiàng),其中每個文檔都與查詢匹配或不匹配。 一個很好的例子是SQL WHERE,后面是一些條件。 SQL查詢總是返回嚴(yán)格符合條件的行。 SQL查詢無法返回歧義結(jié)果。
另一方面,Elasticsearch查詢上下文顯示了每個文檔與您的需求的匹配程度。 為此,查詢使用分析器查找最佳匹配。
經(jīng)驗(yàn)法則是將過濾器用于:
· 是/否搜索
· 搜索精確值(數(shù)字,范圍和關(guān)鍵字)
將查詢用于:
· 結(jié)果不明確(某些文檔比其他文檔更適合)
· 全文搜索
此外,Elasticsearch將自動緩存過濾器的結(jié)果。
在第1部分和第2部分中,我將討論查詢(可以轉(zhuǎn)換為過濾器)。 請不要將結(jié)構(gòu)化和全文與查詢和過濾器混淆-這是兩件事。
結(jié)構(gòu)化查詢也稱為術(shù)語級查詢,是一組查詢方法,用于檢查是否應(yīng)選擇文檔。 因此,在很多情況下,沒有真正必要的相關(guān)性評分-文檔匹配或不匹配(尤其是數(shù)字)。
術(shù)語級查詢?nèi)匀皇遣樵儯虼怂鼈儗⒎祷胤謹(jǐn)?shù)。
名詞查詢 Term Query
返回字段值與條件完全匹配的文檔。 查詢一詞是SQL select * from table_name where column_name =...的替代方式
名詞查詢直接進(jìn)入倒排索引,這可以使其快速進(jìn)行。 在處理文本數(shù)據(jù)時,最好僅將term用于keyword字段。
名詞查詢默認(rèn)情況下在查詢上下文中運(yùn)行,因此,它將計算分?jǐn)?shù)。 即使所有返回的文檔的分?jǐn)?shù)相同,也將涉及其他計算能力。
帶有過濾條件的 名詞 查詢
如果我們想加速名詞查詢并使其得到緩存,則應(yīng)將其包裝在constant_score過濾器中。
還記得經(jīng)驗(yàn)法則嗎? 如果您不關(guān)心相關(guān)性得分,請使用此方法。
現(xiàn)在,該查詢沒有計算任何相關(guān)性分?jǐn)?shù),因此,它更快。 而且,它是自動緩存的。
快速建議-對文本字段使用匹配而不是名詞。
請記住,名詞查詢直接進(jìn)入倒排索引。名詞查詢采用您提供的值并按原樣搜索它,這就是為什么它非常適合查詢未經(jīng)任何轉(zhuǎn)換存儲的keyword字段。
多名詞查詢 Terms query
如您所料,多名詞查詢使您可以返回至少匹配一個確切名詞的文檔。
多名詞查詢在某種程度上是SQL select * from table_name where column_name is in...的替代方法
重要的是要了解,Elasticsearch中的查詢字段可能是一個列表,例如{“ name”:[“ Odin”,“ Woden”,“ Wodan”]}。如果您執(zhí)行的術(shù)語查詢包含以下一個或多個,則該記錄將被匹配-它不必匹配字段中的所有值,而只匹配一個。
與名詞查詢相同,但是這次您可以在查詢字段中指定多少個確切術(shù)語。
您指定必須匹配的數(shù)量-一,二,三或全部。 但是,此數(shù)字是另一個數(shù)字字段。 因此,每個文檔都應(yīng)包含該編號(特定于該特定文檔)。
返回查詢字段值在定義范圍內(nèi)的文檔。
等價于SQL select * from table_name where column_name is between...
范圍查詢具有自己的語法:
· gt 大于
· gte 大于或等于
· lt 小于
· lte 小于或等于
一個示例,該字段的值應(yīng)≥4且≤17
范圍查詢也可以很好地與日期配合使用。
正則表達(dá)式查詢返回其中字段與您的正則表達(dá)式匹配的文檔。
如果您從未使用過正則表達(dá)式,那么我強(qiáng)烈建議您至少了解一下它是什么以及何時可以使用它。
Elasticsearch的正則表達(dá)式是Lucene的正則表達(dá)式。 它具有標(biāo)準(zhǔn)的保留字符和運(yùn)算符。 如果您已經(jīng)使用過Python的re軟件包,那么在這里使用它應(yīng)該不是問題。 唯一的區(qū)別是Lucene的引擎不支持^和$等錨運(yùn)算符。
您可以在官方文檔中找到regexp的完整列表。
除正則表達(dá)式查詢外,Elsticsearch還具有通配符和前綴查詢。從邏輯上講,這兩個只是regexp的特殊情況。
不幸的是,我找不到關(guān)于這三個查詢的性能的任何信息,因此,我決定自己對其進(jìn)行測試,以查看是否發(fā)現(xiàn)任何重大差異。
在比較使用rehexp和通配符查詢時,我找不到性能上的差異。如果您知道有什么不同,請給我發(fā)消息。
由于Elasticsearch是無模式的(或沒有嚴(yán)格的模式限制),因此當(dāng)不同的文檔具有不同的字段時,這是一種很常見的情況。 結(jié)果,有很多用途來了解文檔是否具有某些特定字段。
全文查詢適用于非結(jié)構(gòu)化文本數(shù)據(jù)。 全文查詢利用了分析器。 因此,我將簡要概述Elasticsearch的分析器,以便我們可以更好地分析全文查詢。
每次將文本類型數(shù)據(jù)插入Elasticsearch索引時,都會對其進(jìn)行分析,然后存儲在反向索引中。根據(jù)分析器的配置方式,這會影響您的搜索功能,因?yàn)榉治銎饕策m用于全文搜索。
分析器管道包括三個階段:
總有一個令牌生成器和零個或多個字符和令牌過濾器。
1)字符過濾器按原樣接收文本數(shù)據(jù),然后可能在對數(shù)據(jù)進(jìn)行標(biāo)記之前對其進(jìn)行預(yù)處理。 字符過濾器用于:
· 替換與給定正則表達(dá)式匹配的字符
· 替換與給定字符串匹配的字符
· 干凈的HTML文字
2)令牌生成器將字符過濾器(如果有)之后接收到的文本數(shù)據(jù)分解為令牌。 例如,空白令牌生成器只是將文本分隔為空白(這不是標(biāo)準(zhǔn)的)。 因此,Wednesday is called after Woden, 將被拆分為[Wednesday, is, called, after, Woden.]。 有許多內(nèi)置標(biāo)記器可用于創(chuàng)建自定義分析器。
刪除標(biāo)點(diǎn)符號后,標(biāo)準(zhǔn)令牌生成器將使用空格分隔文本。 對于絕大多數(shù)語言來說,這是最中立的選擇。
除標(biāo)記化外,標(biāo)記化器還執(zhí)行以下操作:
· 跟蹤令牌順序,
· 注釋每個單詞的開頭和結(jié)尾
· 定義令牌的類型
3)令牌過濾器對令牌進(jìn)行一些轉(zhuǎn)換。您可以選擇將許多不同的令牌過濾器添加到分析器中。一些最受歡迎的是:
· 小寫
· 詞干(存在多種語言!)
· 刪除重復(fù)
· 轉(zhuǎn)換為等效的ASCII
· 模式的解決方法
· 令牌數(shù)量限制
· 令牌的停止列表(從停止列表中刪除令牌)
標(biāo)準(zhǔn)分析器是默認(rèn)分析器。 它具有0個字符過濾器,標(biāo)準(zhǔn)令牌生成器,小寫字母和停止令牌過濾器。 您可以根據(jù)需要組成自定義分析器,但是內(nèi)置分析器也很少。
語言分析器是一些最有效的即用型分析器,它們利用每種語言的細(xì)節(jié)來進(jìn)行更高級的轉(zhuǎn)換。 因此,如果您事先知道數(shù)據(jù)的語言,建議您從標(biāo)準(zhǔn)分析器切換為數(shù)據(jù)的一種語言。
全文查詢將使用與索引數(shù)據(jù)時使用的分析器相同的分析器。更準(zhǔn)確地說,您查詢的文本將與搜索字段中的文本數(shù)據(jù)進(jìn)行相同的轉(zhuǎn)換,因此兩者處于同一級別。
匹配查詢是用于查詢文本字段的標(biāo)準(zhǔn)查詢。
我們可以將匹配查詢稱為名詞查詢的等效項(xiàng),但適用于文本類型字段(而在處理文本數(shù)據(jù)時,名詞應(yīng)僅用于關(guān)鍵字類型字段)。
默認(rèn)情況下,傳遞給查詢參數(shù)的字符串(必需的一個)將由與應(yīng)用于搜索字段的分析器相同的分析器處理。 除非您自己使用analyzer參數(shù)指定分析器。
當(dāng)您指定要搜索的短語時,將對其進(jìn)行分析,并且結(jié)果始終是一組標(biāo)記。默認(rèn)情況下,Elasticsearch將在所有這些標(biāo)記之間使用OR運(yùn)算符。這意味著至少應(yīng)該有一場比賽-更多的比賽雖然會得分更高。您可以在運(yùn)算符參數(shù)中將其切換為AND。在這種情況下,必須在文檔中找到所有令牌才能將其返回。
如果要在OR和AND之間輸入某些內(nèi)容,則可以指定minimum_should_match參數(shù),該參數(shù)指定應(yīng)匹配的子句數(shù)。 可以數(shù)字和百分比指定。
模糊參數(shù)(可選)可讓您忽略錯別字。 Levenshtein距離用于計算。
如果您將匹配查詢應(yīng)用于關(guān)鍵字keyword字段,則其效果與詞條查詢相同。 更有趣的是,如果將存儲在反向索引中的令牌的確切值傳遞給term查詢,則它將返回與匹配查詢完全相同的結(jié)果,但是會更快地返回到反向索引。
與匹配相同,但順序和接近度很重要。 匹配查詢不了解序列和接近度,因此,只有通過其他類型的查詢才能實(shí)現(xiàn)詞組匹配。
match_phrase查詢具有slop參數(shù)(默認(rèn)值為0),該參數(shù)負(fù)責(zé)跳過術(shù)語。 因此,如果您指定斜率等于1,則短語中可能會省略一個單詞。
多重比對查詢的功能與比對相同,唯一的不同是多重比對適用于多個欄位
· 字段名稱可以使用通配符指定
· 默認(rèn)情況下,每個字段均加權(quán)
· 每個領(lǐng)域?qū)Φ梅值呢暙I(xiàn)都可以提高
· 如果沒有在fields參數(shù)中指定任何字段,那么將搜索所有符合條件的字段
有多種類型的multi_match。 我不會在這篇文章中描述它們,但是我將解釋最受歡迎的:
best_fields類型(默認(rèn)值)更喜歡在一個字段中找到來自搜索值的令牌的結(jié)果,而不是將搜索的令牌分配到不同字段中的結(jié)果。
most_fields與best_fields類型相反。
phrase類型的行為與best_fields相同,但會搜索與match_phrase類似的整個短語。
我強(qiáng)烈建議您查閱官方文檔,以檢查每個字段的得分計算準(zhǔn)確度。
復(fù)合查詢將其他查詢包裝在一起。 復(fù)合查詢:
· 結(jié)合分?jǐn)?shù)
· 改變包裝查詢的行為
· 將查詢上下文切換到過濾上下文
· 以上任意一項(xiàng)
布爾查詢將其他查詢組合在一起。 這是最重要的復(fù)合查詢。
布爾查詢使您可以將查詢上下文中的搜索與過濾器上下文搜索結(jié)合在一起。
布爾查詢具有四個可以組合在一起的出現(xiàn)(類型):
· must或"必須滿足該條款"
· should或"如果滿足條款,則對相關(guān)性得分加分"
· 過濾器filter或"必須滿足該條款,但不計算相關(guān)性得分"
· must_not或“與必須相反”,不會有助于相關(guān)度得分
必須和應(yīng)該→查詢上下文
過濾器和must_not→過濾器上下文
對于那些熟悉SQL的人,必須為AND,而應(yīng)為OR運(yùn)算符。 因此,必須滿足must子句中的每個查詢。
對于大多數(shù)查詢,提升查詢與boost參數(shù)相似,但并不相同。 增強(qiáng)查詢將返回與肯定子句匹配的文檔,并降低與否定子句匹配的文檔的得分。
如我們在術(shù)語查詢示例中先前看到的,constant_score查詢將任何查詢轉(zhuǎn)換為相關(guān)性得分等于boost參數(shù)(默認(rèn)值為1)的過濾器上下文。
讓我知道是否您想閱讀另一篇文章,其中提供了所有查詢的真實(shí)示例。
我計劃在Elasticsearch上發(fā)布更多文章,所以不要錯過。
你已經(jīng)讀了很長的內(nèi)容,所以如果你閱讀到這里:
綜上所述,Elasticsearch符合當(dāng)今的許多用途,有時很難理解什么是最佳工具。
如果不需要相關(guān)性分?jǐn)?shù)來檢索數(shù)據(jù),請嘗試切換到過濾器上下文。
另外,了解Elasticsearch的工作原理也至關(guān)重要,因此,我建議您始終了解分析器的功能。
Elasticsearch中還有許多其他查詢類型。 我試圖描述最常用的。 我希望你喜歡它。
(本文翻譯自kotartemiy ??的文章《Deep Dive into Querying Elasticsearch. Filter vs Query. Full-text search》,參考:)
ASCII 就是字符串。
有效的ASCII碼輸入字符是0到9的十六進(jìn)制數(shù)代碼值30到39,和大寫字符A到F的十六進(jìn)制數(shù)代碼值41到46這些字母數(shù)字字符。
VB10 0011 0010(16#32);0011 0100(16#34);01000101(16#45)對照ASCII碼表可知,32對應(yīng)2,34對應(yīng)4,45對應(yīng)E由于VB20開始需要占3個字節(jié),所以每個字節(jié)的一半得到相應(yīng)的數(shù)值。
目前NoSQL數(shù)據(jù)庫仍然沒有一個統(tǒng)一的標(biāo)準(zhǔn),它現(xiàn)在有四種大的分類:
(1)鍵值對存儲(key-value):代表軟件Redis,它的優(yōu)點(diǎn)能夠進(jìn)行數(shù)據(jù)的快速查詢,而缺點(diǎn)是需要存儲數(shù)據(jù)之間的關(guān)系。
(2)列存儲:代表軟件Hbase,它的優(yōu)點(diǎn)是對數(shù)據(jù)能快速查詢,數(shù)據(jù)存儲的擴(kuò)展性強(qiáng)。而缺點(diǎn)是數(shù)據(jù)庫的功能有局限性。
(3)文檔數(shù)據(jù)庫存儲:代表軟件MongoDB,它的優(yōu)點(diǎn)是對數(shù)據(jù)結(jié)構(gòu)要求不特別的嚴(yán)格。而缺點(diǎn)是查詢性的性能不好,同時缺少一種統(tǒng)一查詢語言。
掌握J(rèn)ava編程語言,包含io/nio/socket/multi threads/collection/concurrency等功能的使用;
熟練掌握jvm(sun hotspot和ibm j9)內(nèi)存模型、gc垃圾回收調(diào)優(yōu)等技能;
精通JVM,JMM,MVC架構(gòu),熟練使用struts2。
熟練使用spring、struts、ibatis構(gòu)建應(yīng)用系統(tǒng)。
熟練使用Servlet,jsp,freemark等前端技術(shù)。
熟練使用axis搭建基于SOAP協(xié)議的WebService服務(wù)接口。
熟練使用MAVEN構(gòu)建項(xiàng)目工程。
熟練使用tomcat等web服務(wù)。
熟練使用mysql等關(guān)系型數(shù)據(jù)庫,熟悉mysql集群搭建。
熟練使用redis等NOSQL技術(shù)。
熟悉tcp、http協(xié)議。
熟悉nginx、haproxy等配置。
熟悉javascript、ajax等技術(shù)。
熟悉主流分布式文件系統(tǒng)FastDFS等。
熟悉JMS,可熟練使用ActiveMQ。
底層計算機(jī)理解內(nèi)存管理/數(shù)據(jù)挖掘系統(tǒng)
可靠性和可用性如何理解~
jsp和sever lap對比
數(shù)據(jù)庫到界面,字符集轉(zhuǎn)化
基棧
jvm優(yōu)化cup高的時候如果分析和監(jiān)控
java curb突出細(xì)節(jié)問題
分布式緩存文檔如何分流
遷移數(shù)據(jù)庫垂直分割
高并發(fā)如何處理前端高并發(fā)應(yīng)用層
LB設(shè)計load balance
負(fù)載均衡
防網(wǎng)絡(luò)攻擊
數(shù)據(jù)日志事件監(jiān)控后通知
數(shù)據(jù)庫事務(wù)實(shí)現(xiàn)的底層機(jī)制
字符串空格輸入的網(wǎng)絡(luò)攻擊
Quartz框架的底層原理
數(shù)據(jù)庫同步中不通過數(shù)據(jù)庫引擎直接讀日志等方式同步數(shù)據(jù)
分布式
微服務(wù)
還有很多內(nèi)容。路非常遠(yuǎn)啊 。
Membase
Membase 是 NoSQL 家族的一個新的重量級的成員。Membase是開源項(xiàng)目,源代碼采用了Apache2.0的使用許可。該項(xiàng)目托管在GitHub.Source tarballs上,可以下載beta版本的Linux二進(jìn)制包。該產(chǎn)品主要是由North Scale的memcached核心團(tuán)隊(duì)成員開發(fā)完成,其中還包括Zynga和NHN這兩個主要貢獻(xiàn)者的工程師,這兩個組織都是很大的在線游戲和社區(qū)網(wǎng)絡(luò)空間的供應(yīng)商。
Membase容易安裝、操作,可以從單節(jié)點(diǎn)方便的擴(kuò)展到集群,而且為memcached(有線協(xié)議的兼容性)實(shí)現(xiàn)了即插即用功能,在應(yīng)用方面為開發(fā)者和經(jīng)營者提供了一個比較低的門檻。做為緩存解決方案,Memcached已經(jīng)在不同類型的領(lǐng)域(特別是大容量的Web應(yīng)用)有了廣泛的使用,其中 Memcached的部分基礎(chǔ)代碼被直接應(yīng)用到了Membase服務(wù)器的前端。
通過兼容多種編程語言和框架,Membase具備了很好的復(fù)用性。在安裝和配置方面,Membase提供了有效的圖形化界面和編程接口,包括可配置 的告警信息。
Membase的目標(biāo)是提供對外的線性擴(kuò)展能力,包括為了增加集群容量,可以針對統(tǒng)一的節(jié)點(diǎn)進(jìn)行復(fù)制。 另外,對存儲的數(shù)據(jù)進(jìn)行再分配仍然是必要的。
這方面的一個有趣的特性是NoSQL解決方案所承諾的可預(yù)測的性能,類準(zhǔn)確性的延遲和吞吐量。通過如下方式可以獲得上面提到的特性:
◆ 自動將在線數(shù)據(jù)遷移到低延遲的存儲介質(zhì)的技術(shù)(內(nèi)存,固態(tài)硬盤,磁盤)
◆ 可選的寫操作一一異步,同步(基于復(fù)制,持久化)
◆ 反向通道再平衡[未來考慮支持]
◆ 多線程低鎖爭用
◆ 盡可能使用異步處理
◆ 自動實(shí)現(xiàn)重復(fù)數(shù)據(jù)刪除
◆ 動態(tài)再平衡現(xiàn)有集群
◆ 通過把數(shù)據(jù)復(fù)制到多個集群單元和支持快速失敗轉(zhuǎn)移來提供系統(tǒng)的高可用性。
MongoDB
MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bjson格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是他支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。它的特點(diǎn)是高性能、易部署、易使用,存儲數(shù)據(jù)非常方便。
主要功能特性:
◆ 面向集合存儲,易存儲對象類型的數(shù)據(jù)
“面向集合”(Collenction-Oriented),意思是數(shù)據(jù)被分組存儲在數(shù)據(jù)集中,被稱為一個集合(Collenction)。每個 集合在數(shù)據(jù)庫中都有一個唯一的標(biāo)識名,并且可以包含無限數(shù)目的文檔。集合的概念類似關(guān)系型數(shù)據(jù)庫(RDBMS)里的表(table),不同的是它不需要定 義任何模式(schema)。
◆ 模式自由
模式自由(schema-free),意味著對于存儲在mongodb數(shù)據(jù)庫中的文件,我們不需要知道它的任何結(jié)構(gòu)定義。如果需要的話,你完全可以把不同結(jié)構(gòu)的文件存儲在同一個數(shù)據(jù)庫里。
◆支持動態(tài)查詢
◆支持完全索引,包含內(nèi)部對象
◆支持查詢
◆支持復(fù)制和故障恢復(fù)
◆使用高效的二進(jìn)制數(shù)據(jù)存儲,包括大型對象(如視頻等)
◆自動處理碎片,以支持云計算層次的擴(kuò)展性
◆支持RUBY,PYTHON,JAVA,C++,PHP等多種語言
◆文件存儲格式為BSON(一種JSON的擴(kuò)展)
BSON(Binary Serialized document Format)存儲形式是指:存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一標(biāo)識一個文檔,為字符串類型,而值則可以是各種復(fù)雜的文件類型。
◆可通過網(wǎng)絡(luò)訪問
MongoDB服務(wù)端可運(yùn)行在Linux、Windows或OS X平臺,支持32位和64位應(yīng)用,默認(rèn)端口為27017。推薦運(yùn)行在64位平臺,因?yàn)镸ongoDB在32位模式運(yùn)行時支持的最大文件尺寸為2GB。
MongoDB把數(shù)據(jù)存儲在文件中(默認(rèn)路徑為:/data/db),為提高效率使用內(nèi)存映射文件進(jìn)行管理。
Hypertable
Hypertable是一個開源、高性能、可伸縮的數(shù)據(jù)庫,它采用與Google的Bigtable相似的模型。在過去數(shù)年中,Google為在PC集群 上運(yùn)行的可伸縮計算基礎(chǔ)設(shè)施設(shè)計建造了三個關(guān)鍵部分。第一個關(guān)鍵的基礎(chǔ)設(shè)施是Google File System(GFS),這是一個高可用的文件系統(tǒng),提供了一個全局的命名空間。它通過跨機(jī)器(和跨機(jī)架)的文件數(shù)據(jù)復(fù)制來達(dá)到高可用性,并因此免受傳統(tǒng) 文件存儲系統(tǒng)無法避免的許多失敗的影響,比如電源、內(nèi)存和網(wǎng)絡(luò)端口等失敗。第二個基礎(chǔ)設(shè)施是名為Map-Reduce的計算框架,它與GFS緊密協(xié)作,幫 助處理收集到的海量數(shù)據(jù)。第三個基礎(chǔ)設(shè)施是Bigtable,它是傳統(tǒng)數(shù)據(jù)庫的替代。Bigtable讓你可以通過一些主鍵來組織海量數(shù)據(jù),并實(shí)現(xiàn)高效的 查詢。Hypertable是Bigtable的一個開源實(shí)現(xiàn),并且根據(jù)我們的想法進(jìn)行了一些改進(jìn)。
Apache Cassandra
Apache Cassandra是一套開源分布式Key-Value存儲系統(tǒng)。它最初由Facebook開發(fā),用于儲存特別大的數(shù)據(jù)。Facebook在使用此系統(tǒng)。
主要特性:
◆ 分布式
◆ 基于column的結(jié)構(gòu)化
◆ 高伸展性
Cassandra的主要特點(diǎn)就是它不是一個數(shù)據(jù)庫,而是由一堆數(shù)據(jù)庫節(jié)點(diǎn)共同構(gòu)成的一個分布式網(wǎng)絡(luò)服務(wù),對Cassandra 的一個寫操作,會被復(fù)制到其他節(jié)點(diǎn)上去,對Cassandra的讀操作,也會被路由到某個節(jié)點(diǎn)上面去讀取。對于一個Cassandra群集來說,擴(kuò)展性能 是比較簡單的事情,只管在群集里面添加節(jié)點(diǎn)就可以了。
Cassandra是一個混合型的非關(guān)系的數(shù)據(jù)庫,類似于Google的BigTable。其主要功能比 Dynomite(分布式的Key-Value存 儲系統(tǒng))更豐富,但支持度卻不如文檔存儲MongoDB(介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的開源產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫 的。Cassandra最初由Facebook開發(fā),后轉(zhuǎn)變成了開源項(xiàng)目。它是一個網(wǎng)絡(luò)社交云計算方面理想的數(shù)據(jù)庫。以Amazon專有的完全分布式的Dynamo為基礎(chǔ),結(jié)合了Google BigTable基于列族(Column Family)的數(shù)據(jù)模型。P2P去中心化的存儲。很多方面都可以稱之為Dynamo 2.0。
CouchDB
所用語言: Erlang
特點(diǎn):DB一致性,易于使用
使用許可: Apache
協(xié)議: HTTP/REST
雙向數(shù)據(jù)復(fù)制,持續(xù)進(jìn)行或臨時處理,處理時帶沖突檢查,因此,采用的是master-master復(fù)制
MVCC – 寫操作不阻塞讀操作
可保存文件之前的版本
Crash-only(可靠的)設(shè)計
需要不時地進(jìn)行數(shù)據(jù)壓縮
視圖:嵌入式 映射/減少
格式化視圖:列表顯示
支持進(jìn)行服務(wù)器端文檔驗(yàn)證
支持認(rèn)證
根據(jù)變化實(shí)時更新
支持附件處理
因此, CouchApps(獨(dú)立的 js應(yīng)用程序)
需要 jQuery程序庫
最佳應(yīng)用場景:適用于數(shù)據(jù)變化較少,執(zhí)行預(yù)定義查詢,進(jìn)行數(shù)據(jù)統(tǒng)計的應(yīng)用程序。適用于需要提供數(shù)據(jù)版本支持的應(yīng)用程序。
例如:CRM、CMS系統(tǒng)。 master-master復(fù)制對于多站點(diǎn)部署是非常有用的。
和其他數(shù)據(jù)庫比較,其突出特點(diǎn)是:
◆ 模式靈活 :使用Cassandra,像文檔存儲,你不必提前解決記錄中的字段。你可以在系統(tǒng)運(yùn)行時隨意的添加或移除字段。這是一個驚人的效率提升,特別是在大型部 署上。
◆ 真正的可擴(kuò)展性 :Cassandra是純粹意義上的水平擴(kuò)展。為給集群添加更多容量,可以指向另一臺電腦。你不必重啟任何進(jìn)程,改變應(yīng)用查詢,或手動遷移任何數(shù)據(jù)。
◆ 多數(shù)據(jù)中心識別 :你可以調(diào)整你的節(jié)點(diǎn)布局來避免某一個數(shù)據(jù)中心起火,一個備用的數(shù)據(jù)中心將至少有每條記錄的完全復(fù)制。
◆ 范圍查詢 :如果你不喜歡全部的鍵值查詢,則可以設(shè)置鍵的范圍來查詢。
◆ 列表數(shù)據(jù)結(jié)構(gòu) :在混合模式可以將超級列添加到5維。對于每個用戶的索引,這是非常方便的。
◆ 分布式寫操作 :有可以在任何地方任何時間集中讀或?qū)懭魏螖?shù)據(jù)。并且不會有任何單點(diǎn)失敗。
問度娘,啥都有。
values:值,數(shù)據(jù) 在非事物型的nosql數(shù)據(jù)庫中,例如redis數(shù)據(jù)庫是:key-values數(shù)據(jù)庫,俗稱:鍵-值 values就是數(shù)據(jù),他對應(yīng)的是key值,程序可以通過getValues(key) 的方式來獲取數(shù)據(jù)。
文章題目:nosql空格字符串,nosql字符串命令
轉(zhuǎn)載注明:http://m.kartarina.com/article16/hddpgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、App開發(fā)、自適應(yīng)網(wǎng)站、ChatGPT、用戶體驗(yàn)、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)